Perl:将数组写入文本文件

问题描述:

此问题与Perl有关,将数组写入文本文件。Perl:将数组写入文本文件

我打开一个文件名_1并将这个文件的内容存储到一个数组中。 然后我写这个数组到filename_2。 如果我不修改这个数组。我期望filename_2与filename_1完全相同。

事实上,我总是在filename_2的末尾看到一行额外的行。有人能帮我吗?

这里是我的代码:

open(Fh, "<", "filename_1.txt") or die "Cannot open for read"; 
my @l_file_content_array = <Fh>; 
close Fh; 

open(Fh2, ">", "filename_2.txt") or die "Cannot open for write"; 
print Fh2 @l_file_content_array; 
close Fh2; 
+0

这些文件应该是相同的......当您比较它们时,有什么区别? – Hambone

+0

区别在于filename_2的末尾有一个额外的行。当您打开这两个文件时,可以通过光标的位置看到这种差异的指示。或者cvs软件或其他diff软件会指出这种差异。 – user5680155

+0

在Ubuntu 14.10的Perl 5.20中可以正常工作。你在用什么系统? –

你可以试试:

chomp(my @l_file_content_array = <Fh>); 

这应该删除您输入文件的最后一行结束。

+0

感谢您的回复。但是,这个建议并不行。使用上面chomp的代码,filename_2将只包含一行,其中包含文件名_1的内容。文件名_1的所有行都被删除并连接成一行。 – user5680155

+0

@ user5680155是的,我认为你可以使用'print Fh2 join(“\ n”,@l_file_content_array);'而不是'print Fh2 @l_file_content_array;'但是,如果你不同意这个,你可以使用'我的@contents = ; chomp($ contents [$#contents]);'这将删除文件的最后一行。 –

尝试添加行:

$\ = ""; # set default print ending to empty string 

打印FH2 @l_file_content_array之前;线。

如果上面的“作品”,它可能意味着有一个

$\ = "\n"; 

线别处程序或包含文件。您仍然可以通过添加该行来修复本地行为:

local $\ = "";