Ошибка вызова mkdir в Perl - PullRequest
       6

Ошибка вызова mkdir в Perl

0 голосов
/ 19 октября 2011

Я пытаюсь создать каталог с помощью Perl. Но этот вызов не удается. Однако, когда я пытаюсь создать ту же структуру каталогов в командной строке, она работает нормально. Может кто-нибудь, пожалуйста, дайте мне знать, почему я не могу создать каталог в структуре каталогов? Пример:

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

В этом примере localdatafs1, Domino, mail\abhy.nsf и Sent - это каталоги, которые уже существуют. Я хочу создать каталог с именем metadata в структуре каталогов /localdatafs1/Domino/mail\abhy.nsf/Sent/Metadata с использованием Perl. Этот вызов mkdir не выполняется.

Если я выполню команду

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

в приглашении оболочки каталог успешно создан.

Почему я не могу создать каталог в Perl по указанному выше пути?

Ответы [ 2 ]

4 голосов
/ 19 октября 2011

Ваша оболочка понимает язык, отличный от Perl. В вашей оболочке код

/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"

производит желаемую строку. Обратите внимание на побег "\".

3 голосов
/ 19 октября 2011
$path = "/localdatafs1/Domino/mail\abhy.nsf/Sent/Metadata"
                                  ^--- escape character, turning the path into

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