我正在做一个Perl脚本将另一个变量附加到当前工作目录的末尾,但是我在使用该模块时遇到了问题.
如果我从中运行getcwd D:\
,则返回的值为
D:/ (with forward slash)
Run Code Online (Sandbox Code Playgroud)
如果我从中运行getcwd D:\Temp\
,则返回的值为
D:/temp (without forward slash)
Run Code Online (Sandbox Code Playgroud)
这使得情况非常棘手,因为如果我只是这样做:
use Cwd;
$ProjectName = "Project"; # This is a variable supplied by the user
$directory = getcwd().$ProjectName."\/";
print $directory."\n";
Run Code Online (Sandbox Code Playgroud)
我会以两种方式结束
D:/Project (correct)
Run Code Online (Sandbox Code Playgroud)
要么
D:/TempProject (instead of D:/Temp/Project)
Run Code Online (Sandbox Code Playgroud)
这是一个功能Cwd
吗?它似乎不在文档中.
我已经想到了以下代码来解决这个问题.这需要3行.你们中的任何人都可以看到更简洁的方式吗?
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";
Run Code Online (Sandbox Code Playgroud)使用File :: Spec而不是创建自己的路径操作例程.
use Cwd;
use File::Spec;
$ProjectName = "Project";
$cwd = getcwd();
$directory = File::Spec->catdir($cwd, $ProjectName);
print "$directory\n";
Run Code Online (Sandbox Code Playgroud)