-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ステートメントから、コードは以前はそのようになっているように見えます。

  • 字句ファイルハンドルと3パラメータ形式のを使用する必要があります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 に答える