2

私が取り組んでいるこの単純なスクリプトがあります。私は認めなければなりません、私はPERLに全く慣れておらず、このばかげた問題にちょっと立ち往生しています。

open(IN, "<def/t.html") or die();
while(<IN>) {
    chomp;
    if($_ =~ m/FF0000/) {
        print "\n".$_."\n";
    }
}

だから...私はt.htmlを開いて、ファイル内の指定された文字列を見つけました。出力は問題ありませんでしたが、文字列が見つかったファイルのファイル名も印刷する必要があります。これを返す方法が本当にわからないので、直後に必要$_です。よろしくお願いします。

4

2 に答える 2

4

開く前にファイル名を変数に保存し、そこから移動します。

my $filename = 'def/t.html';
open( IN, '<', $filename ) or die $!;
...
print "\n$filename: " . $_ . "\n";

open()上記では、より安全な3引数形式のを使用していることに注意してください。

(また、言語は「PERL」ではなく「Perl」です。)

于 2012-06-26T13:49:57.317 に答える
3

これは奇妙な考えですが、必要に応じて次のことができます。

$ cat 1.pl

#somewhere in the code
open(F, "f.txt");
my $f = fileno(F);

#here you want to find the filename
open(FILENAME, "ls -l /proc/$$/fd/$f|");
my @fn = split(/\s+/, <FILENAME>);
print $fn[$#fn],"\n";

$ perl 1.pl 
/home/ic/f.txt

ここでは、ファイル記述子のみを知っており、それを使用してファイル名を見つけます。

readlink:でもっと短く書くこともできます

open(F, "f.txt");
my $f = fileno(F);

#here you want to find the filename
print readlink("/proc/$$/fd/$f"), "\n";

ファイルはすでに削除されている可能性があることに注意する必要があります(ただし、開いている場合はまだ存在します)。

于 2012-06-26T14:00:01.013 に答える