Ошибка Perl ChDir

Я пытаюсь изменить рабочий каталог (для настройки менеджера очередей WebShpere MQ), используя Perl в UNIX.

Мне нужно перейти в каталог /var/mqm/qmgrs/Q\!MAN, и я использовал следующий фрагмент кода:

$QueueManagerPathName = 'Q\!MAN';
chdir('/var/mqm/qmgrs/'.$QueueManagerPathName) or die "Cannot change to dir : /var/mqm/qmgrs/".$QueueManagerPathName."\n";

Но он не меняет каталог и умирает, давая

Cannot change to dir : /var/mqm/qmgrs/Q\!MAN

Когда я удаляю переменную $QueueManagerPathName, она работает нормально, и я заключаю, что это будет ошибкой с использованием части "\!".


person DarRay    schedule 24.10.2011    source источник


Ответы (3)


Вам не нужно экранировать ! в имени каталога. Это должно работать:

my $dir = '/var/mqm/qmgrs/Q!MAN';
chdir $dir or die "Can't cd to $dir: $!\n";
person Eugene Yarmash    schedule 24.10.2011
comment
Большое тебе спасибо. Я неправильно понял это с представлением оболочки UNIX. С использованием $QueueManagerPathName = 'Q!MAN'; все работало нормально. Еще раз спасибо - person DarRay; 24.10.2011
comment
Если бы вы передавали строку в оболочку (например, используя «систему» ​​или обратные кавычки), вам это нужно, но «chdir» является родным для Perl. - person Colin Fine; 24.10.2011
comment
@Colin: system("ls !test/*") и print `ls !test/*` тоже работают - person Eugene Yarmash; 24.10.2011
comment
О, они? Я думал, что оболочка интерпретирует это. - person Colin Fine; 24.10.2011

Строки в одинарных кавычках не интерполируют обратную косую черту, поэтому вы пытаетесь перейти в каталог с именем /var/mqm/qmgrs/Q\!MAN.

Либо опустите обратную косую черту, либо используйте строку в двойных кавычках.

person Colin Fine    schedule 24.10.2011

У вас есть обратная косая черта в вашей переменной... Я бы сказал, что вы слишком много убегаете.

person Mathew    schedule 24.10.2011