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 中使用变量作为路径吗?
该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. 看到这个帖子