2010-09-16 109 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

如果你用IE打开,'开放的(我的$跳频, '<' 的三个参数形式这将是很好, “input.txt”)或者死亡$ !;' – 2010-09-16 07:26:13

回答

3

我总是用:

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

没有这样的问题...

+0

这对我来说很好... thx – 2010-09-16 09:16:00

+5

这可能会导致错误,因为'while'本地化'$ _' – 2010-09-16 20:04:32

+0

我不得不承认你是完全正确的。使用这个构造时需要非常小心(即嵌套while while循环将无法正常工作)。我意识到这些问题,我将继续使用这种编码风格,但Perl新手应该避免它。 – 2010-11-12 14:19:37

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添加一个隐式'defined'测试的特例。 – cjm 2010-09-16 07:46:51

+3

请不要链接到书籍的海盗副本 – 2010-09-16 08:21:20