gpt4 book ai didi

windows - 如何打开 File::Find 从所需函数中找到的文件?

转载 作者:可可西里 更新时间:2023-11-01 10:55:29 25 4
gpt4 key购买 nike

我有如下代码。如果我在我的搜索中打开文件$File::Find::name(在本例中是./tmp/tmp.h) > 函数(由 File::Find::find 调用),它说“无法打开文件 ./tmp/tmp.h reason = No such file or directory at temp.pl line 36, line 98。”

如果我直接在另一个函数中打开文件,我可以打开文件。有人可以告诉我这种行为的原因吗?我在 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,".") ;

最佳答案

参见 perldoc File::Find : 在 File::Find::find 更改为当前搜索的目录后,将调用所需的函数(在您的情况下为搜索)。如您所见,$File::Find::name 包含相对于搜索开始位置的文件路径。当前目录更改后该路径将不起作用。

你有两个选择:

  1. 告诉 File::Find 不要更改它搜索的目录:find( { wanted =>\%search, no_chdir => 1 }, '.' );
  2. 或者不要使用 $File::Find::name,而是使用 $_

关于windows - 如何打开 File::Find 从所需函数中找到的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1298700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com