2010-06-10 48 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

相关问题