Perl getcwd结束正斜杠

And*_*ndy 2 perl cwd

我正在做一个Perl脚本将另一个变量附加到当前工作目录的末尾,但是我在使用该模块时遇到了问题.

  1. 如果我从中运行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吗?它似乎不在文档中.

  2. 我已经想到了以下代码来解决这个问题.这需要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)

eph*_*ent 9

使用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)