首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl getcwd结束正斜杠

Perl getcwd结束正斜杠
EN

Stack Overflow用户
提问于 2009-05-28 17:39:09
回答 2查看 4.3K关注 0票数 2

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

  1. 如果我从D:\运行getcwd,返回的值是 D:/ (使用正斜杠)如果从D:\Temp\运行getcwd,返回的值是 D:/temp (没有正斜杠) 这使得情况变得相当棘手,因为如果我只是这样做的话: 使用Cwd;$ProjectName = "Project";#这是由用户$directory =getcwd().$ProjectName提供的变量。“\/”;打印$directory。 最后,我将得到D:/Project(更正)orD:/TempProject(而不是D:/Temp/Project) 这是Cwd中的一个特性吗?它似乎不在文档中。
  2. 我想出了下面的代码来解决这个问题。它需要3行才能完成。你们中有谁能看到更简洁的方式吗? 使用Cwd;$ProjectName = "Project";#这是由用户$directory =getcwd()提供的变量;$directory =~ s/(.+?)(^\\/$1$2//g;# Append“/如果不以正反斜杠$directory .= $ProjectName结尾)。”
EN

回答 2

Stack Overflow用户

发布于 2009-05-28 17:54:33

使用档案::Spec而不是创建自己的路径操作例程。

代码语言:javascript
复制
use Cwd;
use File::Spec;

$ProjectName = "Project";

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

print "$directory\n";
票数 9
EN

Stack Overflow用户

发布于 2009-05-28 17:58:17

第一种情况包括尾随斜杠,因为"D:“是一个卷说明符。它不是一个有效的目录名。"D:/“类似于Unix/Linux中的根目录。

快速而肮脏的解决方案:

代码语言:javascript
复制
$directory .= '/' unless $directory =~ m|/$|;

对于健壮和可移植的解决方案,如果您喜欢非面向对象的接口,请使用档案::Spec文件::Spec::Functions

代码语言:javascript
复制
use Cwd;
use File::Spec::Functions qw(catdir);

my $directory = catdir(getcwd(), $ProjectName);

请注意,catdir不包括尾随斜杠,该文件::Spec使用主机操作系统的目录分隔符构建路径。(例如,Windows上的反斜杠)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/922221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档