Perl chdir失败,并带有全局模式

问题描述

我正在尝试在我的perl脚本中执行cd。我正在使用以下命令:

chdir "/home/test/test1/test2/perl*";

perl*的值实际上是perl_0122_2044,但该值可能会有所不同。

上面的chdir命令未对路径执行cd。我在做错什么吗?

解决方法

chdir在参数中不接受*和其他扩展字符。为此,请使用glob或类似的名称来提取单个目录,然后提取chdir。例如,这会将目录更改为找到的第一个/home/test/test1/test2/perl*

$dir = (glob "/home/test/test1/test2/perl*")[0];
# only change dir if any dir was found: 
if (-d $dir) {
    # fail if cannot change dir (or,even better,use autodie):
    chdir $dir or die "Could not change to $dir: $!";
}
,

chdir需要路径,而不是通配符。使用glob扩展通配符:

my ($dir) = glob "/home/test/test1/test2/perl*";
chdir $dir or die "$dir: $!";

如果有多个扩展,将使用第一个。

,

同样,glob由raku https://modules.raku.org/dist/IO::Glob

中的模块处理