我正在处理这个简单的脚本。我必须承认,我对PERL完全不熟悉并且有点坚持这个愚蠢的问题。
open(IN, "<def/t.html") or die();
while(<IN>) {
chomp;
if($_ =~ m/FF0000/) {
print "\n".$_."\n";
}
}
所以......我打开了t.html,在文件中找到了给定的字符串。输出没问题,但我还需要打印一个文件的文件名,其中找到了字符串。我真的不知道如何归还这个,我需要在$_
之后。感谢您的帮助。
答案 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";
我必须注意,该文件已被删除(但如果它已打开,它仍然存在)。