2012-08-17 55 views
1

我在寫一個將文件讀入數組的perl腳本。我在Windows上編寫了程序,使用Perl 5.16(它也適用於5.14),並且腳本使用Perl 5.12的Mac失敗。迭代行與while和數組賦值之間的區別

失敗的部分爲:my @array = <$file>。在Mac上,數組返回了正確的大小(與文件中的行數相同),但除最後一個元素外,其他每個元素均爲空。該代碼工作正常,當我切換到這個代替:

my @array; 
while(<$file>){ 
    push @array, $_; 
} 

我不知道這是否會作出區別,如果我換行尾是LF而不是CRLF(視窗風格)。雖然問題是固定的,但它讓我感到困惑。我認爲我列出的這兩個代碼片段是,確切地說是同樣的東西。他們在這裏產生不同結果的區別是什麼?

+0

Opps!我想我會刪除這個,並提出一個不同的問題... – 2012-08-17 17:22:16

回答

1

答案是這兩種方法完全相同,正如你猜測的那樣。例如:

my $start = tell DATA; #store beginning filehandle position 

my @array1 = <DATA>; 

seek DATA,$start,0; #reset filehandle position 

my @array2; 
while(<DATA>){ 
    push @array2,$_; 
} 

print "List assignment:\n @array1\n"; 
print "Looping through:\n @array2\n"; 

__DATA__ 
1 
2 
foo 
bar 

您之前的失敗可能是別的。也許在Mac或Mac的文件IO中涉及到Perl的一些問題,但更可能是代碼的其他部分(我的意思是沒有個人的:我會對自己的代碼作出相同的假設)。

+1

是的,這是一個不同的錯誤。我扼殺了輸入,兩個平臺上的$ /是不同的。 – 2012-08-17 17:30:40

相關問題