Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Perl getcwd ending forward slashes

Tags:

perl

cwd

I am doing a Perl script to attach another variable to the end of the current working directory, but I am having problems with using the module.

  1. If I run getcwd from D:\, the value returned is

    D:/ (with forward slash)  
    

    If I run getcwd from D:\Temp\, the value returned is

    D:/temp (without forward slash)
    

    This makes the situation quite tricky because if I simply do:

    use Cwd;
    $ProjectName = "Project"; # This is a variable supplied by the user
    $directory = getcwd().$ProjectName."\/";
    print $directory."\n";
    

    I will end up with either

    D:/Project (correct)  
    

    or

    D:/TempProject (instead of D:/Temp/Project)
    

    Is this a feature in Cwd? It does not seem to be in the documentation.

  2. I have thought up the following code to solve this issue. It takes 3 lines to do it. Can any of you see a more concise way?

    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";
    
like image 497
Andy Avatar asked Jan 30 '26 00:01

Andy


1 Answers

Use File::Spec instead of making your own path manipulation routines.

use Cwd;
use File::Spec;

$ProjectName = "Project";

$cwd = getcwd();
$directory = File::Spec->catdir($cwd, $ProjectName);

print "$directory\n";
like image 165
ephemient Avatar answered Jan 31 '26 19:01

ephemient