Perl chdir 以 glob 模式失败

Perl chdir fails with a glob pattern

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

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

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

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

chdir expects a path, not a wildcard. Use glob 扩展通配符:

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

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

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: $!";
}

类似地,glob 由 raku https://modules.raku.org/dist/IO::Glob

中的模块处理