如何获取打开文件的文件名?

时间:2012-06-26 13:46:09

标签: perl

我正在处理这个简单的脚本。我必须承认,我对PERL完全不熟悉并且有点坚持这个愚蠢的问题。

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

所以......我打开了t.html,在文件中找到了给定的字符串。输出没问题,但我还需要打印一个文件的文件名,其中找到了字符串。我真的不知道如何归还这个,我需要在$_之后。感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

只需在打开变量之前将文件名保存在变量中,然后从那里开始:

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

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

(另外,语言是“Perl”,而不是“PERL”。)

答案 1 :(得分: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

在这里,您只知道filedescriptor并使用它找到文件名。

您还可以使用readlink编写更短的内容:

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

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

我必须注意,该文件已被删除(但如果它已打开,它仍然存在)。