Во время чтения книги на передовой Perl программирование [1], я наткнулся этот код:Использование определяется с FILEHANDLE и в то время как Loop
while (defined($s = <>)) {
...
Есть ли особая причина для использования defined
здесь? Документация perlop говорит:
В этих конструкциях цикла, присвоенное значение (будь то назначение автоматическое или неявное) затем проверяется, чтобы увидеть, будет ли она определена. Определенный тест позволяет избежать проблем, когда строка имеет строковое значение, которое должно быть , обработанное как Perl, как ложное, например
""
или"0"
без конечной строки новой строки . Если вы на самом деле означает для таких значений, чтобы завершить цикл, они должны быть проверены на явном виде: [...]
Итак, будет ли угол случай или это просто потому, что книга слишком стар и автоматический тест defined
был добавлен в недавнюю версию Perl?
[1] Advanced Perl Программирование, First Edition, Sriram Сринивазан. O'Reilly (1997)
Я также заметил, что ответ на фактический вопрос был похоронен в последнем абзаце. – darch
Это очень ясно, когда '/ foo /' означает '$ _ = ~/foo /', но это не так ясно, когда '<>' означает 'defined ($ _ = <>)'. Я не считаю их одинаковыми. – ikegami