首页 > 解决方案 > 为什么 opendir 参数无效?

问题描述

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

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

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

错误信息

Couldn't open dir /home/skidmarks/Projects/Perl
 Invalid argument at ./test.py line .

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

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

标签: perl

解决方案


qx(反引号)也返回换行符,所以你需要chomp $dir;.

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

use Cwd qw(cwd);

my $dir = cwd;

现在您不必担心系统命令以及它们如何返回。


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

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


推荐阅读