【发布时间】:2019-05-23 15:41:28
【问题描述】:
我在使用 abs_path() 时遇到问题。我给这个函数一个有效的路径,但我得到undef 作为返回值。使用以下代码从命令行读取路径。
use warnings;
use strict;
use Data::Dumper;
use Cwd qw();
print scalar @ARGV;
print "\n";
print "$ARGV[0]\n";
print "$ARGV[1]\n";
print "$ARGV[2]\n";
my $val = $ARGV[2];
print "$val\n";
my $result = "";
$result = Cwd::abs_path($val);
print "$result\n";
perl脚本执行如下:
perl pl_test.pl -results_dir = /home/user123/
我得到以下结果:
3
-results_dir
=
/home/user123/
/home/user123/
Use of uninitialized value in concatenation (.) or string at pl_test.pl line 16.
我已经使用调试器验证了问题在于 $result 从 Cwd::abs_path($val); 获取 undef 作为返回值。我不明白为什么会这样
其中一个 cmets 促使我进行了一些进一步的测试。我发现以以下方式依赖斜杠:
如果目录不存在:不带斜杠,返回带有斜杠的
undef。如果目录是不存在目录的子目录,则始终返回
undef如果目录存在,则在这两种情况下都可以使用,无论是否带有斜杠
【问题讨论】:
-
目录
/home/user123是否存在? -
它没有。在这种情况下,
undef是正确的返回值吗? -
它应该可以在没有斜杠的情况下工作。
-
@sidyll:不完全是。如果目录本身不存在,它会在没有尾部斜杠的情况下工作,但不会与它一起工作。如果该目录是不存在的目录的子目录,则无论是否带有斜线都将不起作用。如果该目录确实存在,它可以在有和没有斜杠的情况下使用
-
@sidyll 奇怪的是,我也让它的行为与/或没有斜杠不同。但是,该模块适用于文件系统,据我所知,在不存在的路径上使用它是没有意义的。 (在我看来,对斜线的依赖只是强调了这一点。)
标签: perl filesystems