内容在perl中跨文件复制

时间:2014-12-16 16:45:26

标签: perl

我无法使用以下代码将一个文件的内容复制到另一个文件。

open(DATA1, "+>>text.txt") or die "Couldn't open file text.txt, $!";
open(DATA2, "+>>text11.txt") or die "Error $!";

for ($a = 0; $a < 10; $a++) {
    print DATA1 "Test Line $a\n"
}
while (<DATA1>) {
    print DATA2 "$_";
}

close (DATA1);
close (DATA2);

任何人都可以帮助代码出错吗?

3 个答案:

答案 0 :(得分:1)

在尝试从中读取文件之前,您应该seek(DATA1,0,0)将文件指针移动到开头。

答案 1 :(得分:1)

首先在文件末尾打开文件,然后在&#34; +&gt;&gt;&#34;中打开文件。模式。打印到它会将文件位置保留在文件的末尾。要从文件的开头读取,您需要seek回到开头:

open(DATA1, "+>>text.txt") or die "Couldn't open file text.txt, $!";
open(DATA2, "+>>text11.txt") or die "Error $!";

for ($a=0; $a<10; $a++){
print DATA1 "Test Line $a\n"}

seek(DATA1, 0,0); # rewind

while(<DATA1>){
print DATA2 "$_";}

close (DATA1);
close (DATA2);

但是,如果您不需要大量处理选项,则可以使用File::Copy将文件从一个位置复制或移动到另一个位置。它支持文件句柄。

答案 2 :(得分:0)

首先,始终使用严格警告

如果您只想将一个文件复制到另一个文件,请使用File::Copy

use strict;
use warnings;
use feature qw(say);

use File::Copy;

my $file1 = "...";
my $file2 = "...";

copy $file1, $file2 or die qq(Can't copy '$file1' to '$file2');

或者,您可以先打开文件。如果您已经在自己操作文件,这很方便:

use strict;
use warnings;
use autodie;
use feature qw(say);

use File::Copy;

my $file1 = "...";
my $file2 = "...";

open my $fh1, "<", $file1;
open my $fh2, ">", $file2;

copy $fh1, $fh2;

在第二个例子中,我是use autodie。如果文件操作失败,此 pragma 将强制程序中止。这样,每次打开文件,关闭文件或写入文件后,您都不必继续or die qw(...);

use File::Copycopymove命令导入Perl。这是标准模块,这意味着您可以使用它而不必担心它是否会在特定系统上运行。

相关问题