【问题标题】:mkdir call getting failed in Perl在 Perl 中 mkdir 调用失败
【发布时间】:2011-10-18 20:09:54
【问题描述】:

我正在尝试使用 Perl 创建一个目录。但是这个调用失败了。 但是,当我尝试在 shell 提示符下创建相同的目录结构时,它工作正常。 有人可以让我知道为什么我无法在目录结构中创建目录吗? 示例:

$absolutepath = "/localdatafs1/Domino/mail\abhy.nsf/Sent/Metadata";
print $absolutepath."\n";
mkdir "$absolutepath" or die $!;

在此示例中,localdatafs1Dominomail\abhy.nsfSent 是已经存在的目录。我想使用 Perl 在目录结构/localdatafs1/Domino/mail\abhy.nsf/Sent/Metadata 中创建一个名为metadata 的目录。此 mkdir 调用失败。

如果我执行命令

mkdir /localdatafs1/Domino/mail\abhy.nsf/Sent/Metadata

在 shell 提示符下,目录创建成功。

为什么我无法使用上述路径在 Perl 中创建目录?

【问题讨论】:

  • 您的路径是否应该包含\a 字符?
  • die 消息告诉你什么?
  • 看起来你在“mail”和“abhy.nsf”之间有一个“\”而不是一个“/”你试过交换你的“\”的方向吗?
  • @TimN:路径应该包含 \a。
  • @BrianRoach:消息说 ./transfer.pl 上没有这样的文件或目录

标签: perl perl-module mkdir


【解决方案1】:

您的 shell 理解的语言与 Perl 不同。在你的 shell 中,代码

/localdatafs1/Domino/mail\abhy.nsf/Sent/Metadata

产生字符串

/localdatafs1/Domino/mail\abhy.nsf/Sent/Metadata

在 Perl 中,代码

"/localdatafs1/Domino/mail\abhy.nsf/Sent/Metadata"

产生字符串

/localdatafs1/Domino/mail?bhy.nsf/Sent/Metadata

其中? 表示不可打印的控制字符。 Perl 代码

"/localdatafs1/Domino/mail\\abhy.nsf/Sent/Metadata"

产生所需的字符串。注意转义的“\”。

【讨论】:

    【解决方案2】:
    $path = "/localdatafs1/Domino/mail\abhy.nsf/Sent/Metadata"
                                      ^--- escape character, turning the path into
    
    $path = "/localdatafs1/Domino/mail".chr(1)."bhy.nsf/Sent/Metadata"
    

    【讨论】:

    • 或者,如果您确实想在名称中使用反斜杠,也可以使用 mail\\abhy.nsf,但这通常不是一个好主意。
    • 我使用的目录结构为“/localdatafs1/Domino/mail\\abhy.nsf/Sent/Metadata”。 mkdir "/localdatafs1/Domino/mail\\abhy.nsf/Sent/Metadata" 失败。
    • @Rajath:是的,因为 `\` 在 Unix/Linux 系统上不是目录分隔符。 Unix 中的路径不能混合使用 / 和 \,它们必须是 /
    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 2012-08-12
    相关资源
    最近更新 更多