2011-10-18 44 views
-2

Perlを使用してディレクトリを作成しようとしています。しかし、この呼び出しは失敗します。 しかし、シェルプロンプトで同じディレクトリ構造を作成しようとするとうまくいきます。 誰かが私がディレクトリ構造内にディレクトリを作成できない理由を教えてください。 例: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/Metadatametadataというディレクトリを作成したいと思います。このmkdir呼び出しは失敗します。私は、シェルプロンプトでコマンド

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

を実行した場合

、ディレクトリが正常に作成されます。

なぜ上記のパスを使用してPerlでディレクトリを作成できないのですか?

+1

パスに '\ a'文字が含まれていますか? – Tim

+3

'die'メッセージはあなたに何を伝えますか? –

+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

あなたのシェルはPerlとは異なる言語を理解しています。あなたのシェルでは、コード

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

はPerlで

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

文字列を生成し、コード

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

は、文字列?は、aは

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

を生成します非p rintable制御文字。 Perlコード

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

は、目的の文字列を生成します。エスケープされた "\"に注意してください。

関連する問題