2010-09-16 9 views
1

У меня есть небольшой фрагмент кода для печати содержимого в виде текстового файла, как это,Как я могу избежать предупреждений в Perl?

use strict; 
use warnings; 

open (FILE, "2.txt") || die "$!\n"; 

my $var = <FILE>; 
while ($var ne "") 
{ 
    print "$var"; 
    $var = <FILE>; 
} 

текстовый файл,

line 1 
line 2 
line 3 

После запуска кода я получаю предупреждение, как это,

line 1 
line 2 
line 3 
Use of uninitialized value $var in string ne at del.pl line 10, <FILE> line 3. 

Как преодолеть это предупреждение.

+3

Было бы хорошо, если вы используете три ARGS форму открытого т.е. 'открытой (мой $ ФХ, '<'. «input.txt») или die $ !; ' –

ответ

3

Я всегда использую:

while(<FILE>) { 
print $_; 
} 

нет таких проблем ...

+0

Это отлично работает для меня ... thx –

+5

Это может привести к ошибкам, так как 'while' не локализует' $ _' –

+0

Должен признать, что вы совершенно правы. Нужно быть очень осторожным при использовании этой конструкции (т. Е. Вложенной, а петли будут работать неправильно). Я знаю об этих проблемах, и я буду продолжать использовать этот стиль кодирования, но новичкам Perl следует избегать этого. –

0

Самый быстрый фикс, вероятно, заменить

while ($var ne "") 

с

while (defined $var) 
8

Общий идиомы для чтения из файла заключается в следующем:

open my $fh, '<', $file or die $!; 

while (defined(my $line = <$fh>)) { 
    print $line, "\n"; 
} 

Хотя цикл while неявно проверяет для определения того, задан ли результат назначения, лучше сделать для ясности явно.

+5

Обратите внимание, что' while' обычно проверяет истинность, а не определенность. 'while ($ var = )' - частный случай, когда Perl добавляет неявный 'определенный' тест. – cjm

+3

Пожалуйста, не связывайтесь с пиратскими копиями книг –

Смежные вопросы