Perl getcwd结束前斜杠
我正在编写一个Perl脚本,将另一个变量附加到当前工作目录的末尾,但在使用该模块时遇到了问题Perl getcwd结束前斜杠,perl,cwd,Perl,Cwd,我正在编写一个Perl脚本,将另一个变量附加到当前工作目录的末尾,但在使用该模块时遇到了问题 如果从D:\运行getcwd,则返回的值为 D:/ (with forward slash) D:/temp (without forward slash) 如果从D:\Temp\运行getcwd,则返回的值为 D:/ (with forward slash) D:/temp (without forward slash) 这使得情况变得相当棘手,因为如果我只是这样做: use Cwd;
D:\
运行getcwd,则返回的值为
D:/ (with forward slash)
D:/temp (without forward slash)
如果从D:\Temp\
运行getcwd,则返回的值为
D:/ (with forward slash)
D:/temp (without forward slash)
这使得情况变得相当棘手,因为如果我只是这样做:
use Cwd;
$ProjectName = "Project"; # This is a variable supplied by the user
$directory = getcwd().$ProjectName."\/";
print $directory."\n";
我将以任何一种方式结束
D:/Project (correct)
或
这是Cwd
中的功能吗?它似乎不在文档中use Cwd;
$ProjectName = "Project"; # This is a variable supplied by the user
$directory = getcwd();
$directory =~ s/(.+?)([^\\\/])$/$1$2\//g; # Append "/" if not terminating with forward/back slash
$directory .= $ProjectName."\/";
print $directory."\n";
use Cwd;
use File::Spec;
$ProjectName = "Project";
$cwd = getcwd();
$directory = File::Spec->catdir($cwd, $ProjectName);
print "$directory\n";
第一种情况包括尾部斜杠,因为“D:”是一个卷说明符。它不是有效的目录名。“D:/”类似于Unix/Linux中的根目录 快速而肮脏的解决方案:
$directory .= '/' unless $directory =~ m|/$|;
对于健壮且可移植的解决方案,使用或如果您更喜欢非面向对象的接口:
use Cwd;
use File::Spec::Functions qw(catdir);
my $directory = catdir(getcwd(), $ProjectName);
请注意,
catdir
不包含尾部斜杠,File::Spec使用主机操作系统的目录分隔符构建路径。(例如,Windows上的反斜杠)。感谢您让我们了解File::Spec。我必须将整个脚本更改为使用catdir和catfile。我确信从长远来看它会更好。我不介意任何一种方式,我认为File::Spec对我来说都很好。非常感谢。