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";

请注意,上面使用 3-arg 形式open(),这样更安全。

(另外,语言是“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 回答