2010-06-10 71 views
2

我想使用push來添加陣列中的所有元素。然後我保存到另一個文件文件正在每行添加一個額外的空間

但文件我在每一件事情看到一個whitespeace的begining ..

問題是什麼..面前任何一個這個問題。

open FILE , "a.txt" 

while (<FILE>) 
{ 

    my $temp =$_; 

    push @array ,$temp; 

} 
close(FILE); 

open FILE2, "b.txt"; 
print FILE2 "@array"; 
close FILE2; 
+7

[線路17](http://www.perlfoundation.org/perl5/index.cgi?line_17)。 – daxim 2010-06-10 16:17:44

+0

固定線路17錯誤..誰找到了這個?第17行 – Tree 2010-06-10 16:35:44

+3

這是一個謎語。只有我知道答案,但只有你知道這個問題。我們陷入僵局!你如何告訴我這個問題,然後我會告訴你答案。提示:http://www.catb.org/~esr/faqs/smart-questions.html#beprecise – Ether 2010-06-10 16:37:35

回答

7

當你引用一個像這樣的數組變量:"@array"它會插入空格。這就是它們來自你輸出的地方。所以如果你不需要或者不需要這種插值,就不要引用。

現在讓我們將您的程序重寫爲現代Perl。

use strict; 
use warnings FATAL => 'all'; 
use autodie qw(:all); 

my @array; 
{ 
    open my $in, '<', 'a.txt'; 
    @array = <$in>; 
} 

{ 
    open my $out, '>', 'b.txt'; 
    print {$out} @array; 
} 
+0

你已經聲明瞭兩次'@ array',所以一個會掩蓋另一個。 – Ether 2010-06-10 16:44:49

+2

固定。這教會我總是測試運行我的程序,即使它們只有10行。 ': - |' – daxim 2010-06-10 16:46:05

2

open通常需要另一參數,指定該文件是否被打開的輸入或輸出(或兩個或其他一些特殊情況)。您省略了這個參數,因此默認FILE2是一個輸入文件句柄。

你想說的話

open FILE2, '>', "b.txt" 

如果你把線

use warnings; 

在每一個Perl腳本的開始,解釋器將趕上這樣很多問題你。

+1

爲了清楚起見,最好還是說'open FILE1,'<',「a.txt」' – mob 2010-06-10 16:42:02

4

你把報價放在"@array"左右。這使得它成爲一個字符串插值,對於數組而言相當於join($", @array)$"的默認值是(猜是什麼?)一個空格。

嘗試

print FILE2 @array; 
+0

優秀..它工作... – Tree 2010-06-10 16:45:39

相關問題