我正在执行一个Perl脚本,将另一个变量附加到当前工作目录的末尾,但在使用该模块时遇到了问题。
D:\运行getcwd,返回的值是
D:/ (使用正斜杠)如果从D:\Temp\运行getcwd,返回的值是
D:/temp (没有正斜杠)
这使得情况变得相当棘手,因为如果我只是这样做的话:
使用Cwd;$ProjectName = "Project";#这是由用户$directory =getcwd().$ProjectName提供的变量。“\/”;打印$directory。
最后,我将得到D:/Project(更正)orD:/TempProject(而不是D:/Temp/Project)
这是Cwd中的一个特性吗?它似乎不在文档中。发布于 2009-05-28 17:54:33
使用档案::Spec而不是创建自己的路径操作例程。
use Cwd;
use File::Spec;
$ProjectName = "Project";
$cwd = getcwd();
$directory = File::Spec->catdir($cwd, $ProjectName);
print "$directory\n";发布于 2009-05-28 17:58:17
第一种情况包括尾随斜杠,因为"D:“是一个卷说明符。它不是一个有效的目录名。"D:/“类似于Unix/Linux中的根目录。
快速而肮脏的解决方案:
$directory .= '/' unless $directory =~ m|/$|;对于健壮和可移植的解决方案,如果您喜欢非面向对象的接口,请使用档案::Spec或文件::Spec::Functions:
use Cwd;
use File::Spec::Functions qw(catdir);
my $directory = catdir(getcwd(), $ProjectName);请注意,catdir不包括尾随斜杠,该文件::Spec使用主机操作系统的目录分隔符构建路径。(例如,Windows上的反斜杠)。
https://stackoverflow.com/questions/922221
复制相似问题