为什么 opendir 参数无效?

Art*_*rez 1 perl

This is perl 5, version 30, subversion 1 (v5.30.1) built for MSWin32-x64-multi-thread
Win10
cygwin
Run Code Online (Sandbox Code Playgroud)

我不知道如何使用 opendir。这是我的示例代码:

sub test($) {
   my $dir     = shift;
   opendir (DIR, $dir) || die "Couldn't open dir $dir $!";
}
sub main() {
   my $dir = `pwd`;
   test($dir);
}

Run Code Online (Sandbox Code Playgroud)

错误信息

Couldn't open dir /home/skidmarks/Projects/Perl
 Invalid argument at ./test.py line .
Run Code Online (Sandbox Code Playgroud)

pwd 返回一个 Unix 格式的目录路径 ('/')。我已经尝试过使用 Windows 格式的目录路径 ('\')。唯一有效的是对路径使用文字字符串,例如“。” 或“some_directory_path”。

我不能在 opendir 中使用变量作为路径吗?

zdi*_*dim 7

QX(反引号)返回换行符一样,所以你需要chomp $dir;

更好的是,为什么不使用 Perl 的工具

use Cwd qw(cwd);

my $dir = cwd;
Run Code Online (Sandbox Code Playgroud)

现在您不必担心系统命令以及它们的返回方式。


由于 OP 使用pwdfrom cygwin,即使换行消失,获得的路径也是 unix 样式,这与 Perl 的 MSWin32 构建冲突(如打开文件时报告的那样)。使用便携式工具(Cwd如上)和 Windows 版本的 Perl 应该可以避免此类问题。

或者使用工具来转换路径,比如cygpath. 看到这个帖子