我有這樣的代碼的下方。如果我在search
功能(通過File::Find::find
調用)打開文件$File::Find::name
(在這種情況下,它是./tmp/tmp.h
),它說:「無法打開文件./tmp/tmp.h原因=在temp.pl行沒有這樣的文件或目錄第36行,第98行。「如何打開由想要的函數內的File :: Find找到的文件?
如果我直接在另一個函數打開文件,我可以打開該文件。 有人可以告訴我這種行爲的原因嗎?我在Windows上使用activeperl,版本是5.6.1。
use warnings;
use strict;
use File::Find;
sub search
{
return unless($File::Find::name =~ /\.h\s*$/);
open (FH,"<", "$File::Find::name") or die "cannot open the file $File::Find::name reason = $!";
print "open success $File::Find::name\n";
close FH;
}
sub fun
{
open (FH,"<", "./tmp/tmp.h") or die "cannot open the file ./tmp/tmp.h reason = $!";
print "open success ./tmp/tmp.h\n";
close FH;
}
find(\&search,".") ;
我剛剛使用你的代碼,它對我來說工作正常。你是否在使用其他代碼? – Space 2009-08-19 09:36:51
@Octopus,相同的代碼。 – chappar 2009-08-19 09:40:09
兩點意見:第一行更改爲1)'回報,除非/ \^h \ S * $ /'爲了簡潔和清晰。當然,你也可能希望做不區分大小寫的匹配,我不知道爲什麼你要接受文件名後的空格。 2)不需要在'open'調用中引用'$ File :: Find :: name'。 – 2009-08-19 10:42:36