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