-3

如何在目录中打印变量 $newFile 的输出?我怎样才能使用'cp'来做到这一点?修改后,我的代码如下所示:

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
use File::Copy 'cp';

# binmode(STDOUT, ":utf8") ;
# warn Dumper \@repertoire;

my @rep= glob('/home/test/Bureau/Perl/Test/*'); # output to copy in this dir
foreach my $file (@rep)
{
    open(IN, $file) or die "Can't read file '$file' [$!]\n";
    while (<IN>)
    {
    my ($firstCol, $secondCol) = split(/","/, $_); 

    $firstCol =~ s/http:\/\//_/g;
    $secondCol =~ s/\(.+\)/ /ig;
    my $LCsecondCol = lc($secondCol);
    chomp($secondCol);
    chomp($LCsecondCol);
    my $newFile = "$firstCol:($secondCol|$LCsecondCol);";
    $newFile =~ s/=//g;
    print "$newFile\n";

    }
    close(IN);
}
4

1 回答 1

4

您的程序距离编译还有很长的路要走。这些细节你要注意

  • use strict就地,应该是,您必须在首次使用时声明所有变量。变量@files,$file$newFile未声明,因此您的程序无法编译

  • glob在标量上下文中返回与模式匹配的下一个文件名,并且用于while循环。要获取与您应该分配给数组的模式匹配的所有文件,并且从注释掉的warn语句中看起来您的代码曾经是这种方式

  • 您应该使用词法文件句柄和open. 检查状态并open放入字符串做得很好$!die

  • 您的$file =~ ...行看起来应该是替换,末尾的括号应该是分号

  • 您已使用File::Copy但随后用于system复制您的文件。您应该避免在方便的地方进行炮击,并且由于File::Copy提供了一个cp功能,因此您应该使用它

更接近代码工作版本的东西看起来像这样

use strict;
use warnings;

use File::Copy 'cp';

while (my $fileName = glob '/home/test/Bureau/Infobox/*.csv') {

    my @files = do {
        open my $in, '<', $fileName or die "Can't read file '$fileName' [$!]\n";
        print "$fileName\n" ;
        <$in>;
    };

    foreach my $file (@files) {
        my $newFile = $file =~ s/(\x{0625}\x{0646}\b.+?)\./[[    ]]/gr;
        cp $file, $newFile;
    }
}
于 2012-09-14T11:43:34.747 回答