2011-10-18 51 views
-2

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

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

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

如果我在shell提示符下执行命令

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

,目录被成功创建。

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

+1

您的路径应该包含'\ a'字符吗? – Tim

+3

“死亡”讯息告诉你什么? –

+0

看起来你在“mail”和“abhy.nsf”之间有一个“\”而不是“/”你有没有尝试交换“\”的方向? –

回答

3
$path = "/localdatafs1/Domino/mail\abhy.nsf/Sent/Metadata" 
            ^--- escape character, turning the path into 

$path = "/localdatafs1/Domino/mail".chr(1)."bhy.nsf/Sent/Metadata" 
+1

或者你可以使用'mail \\ abhy.nsf',如果你真的想要一个反斜杠的名字,但这通常不是一个好主意。 –

+0

我已将目录结构用作“/localdatafs1/Domino/mail\\abhy.nsf/Sent/Metadata”。 mkdir“/localdatafs1/Domino/mail\\abhy.nsf/Sent/Metadata”失败。 – Rajath

+0

@Rajath:是的,因为'\\'不是Unix/Linux系统上的目录分隔符。你不能在Unix中混用/和\路径,它们必须是/ –

4

您的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 

其中?代表非p可清洗控制字符。 Perl代码

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

产生所需的字符串。请注意逃脱的“\”。