Perl Escape Quotes Проблема - PullRequest
       3

Perl Escape Quotes Проблема

2 голосов
/ 15 марта 2011

Простите, если это слишком тривиально.

Я делаю XSLT, вызывая system () в Perl-скрипте следующим образом:

system("java -Xms256m -Xmx512m -jar $saxonJar -o $tmpFile $inFile $xslFile $saxonParams");

$ inFile - это строка, которая содержит относительный путь к XML-файлу, который будет переведен с использованием XSLT. Это работало нормально, за исключением тех $ inFile, в которых есть место в строке, например, например, «Intro to Dance». htm ", тогда он сообщит об ошибке синтаксиса.

Если это в MS-DOS, то я могу легко обойти эту проблему, поместив кавычку вокруг строки $ inFile в команде XSLT. Я попытался поставить escape в приведенной выше команде, например:

system("java -Xms256m -Xmx512m -jar $saxonJar -o $tmpFile \"$inFile\" $xslFile $saxonParams");

Это не работает. Может кто-нибудь помочь, как я должен поместить кавычки вокруг $ inFile?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 15 марта 2011

Вы можете избежать оболочки (и, следовательно, проблем с выходом из оболочки), передав вместо командной строки system в виде списка.Попробуйте

system( 'java', '-Xms256m', '-Xmx512m', '-jar', $saxonJar, '-o', $tmpFile, $inFile, $xslFile, $saxonParams );

См. Perldoc для system , чтобы узнать больше о том, как это работает.

1 голос
/ 15 марта 2011

Это на самом деле MS-DOS?

Вы сказали, что это не сработало, но не то, что на самом деле произошло. Вы получили ошибку? Что это было?

Если это в системе Unixish, просто подставьте одинарные кавычки:

system("java -Xms256m -Xmx512m -jar $saxonJar -o $tmpFile '$inFile' $xslFile $saxonParams");

Я не знаю, будет ли это работать в MS-DOS или нет.

Если имя файла содержит " или ', оно становится немного более сложным, поскольку его необходимо сохранить на уровне оболочки:

$inFile =~ s/(['"])/\\$1/g;
system("java -Xms256m -Xmx512m -jar $saxonJar -o $tmpFile \"$inFile\" $xslFile $saxonParams");

(или что-то подобное.)

Еще лучше, используйте форму с несколькими аргументами:

system('java', '-Xms256m', '-Xmx512m', '-jar', $saxonJar, '-o', $tmpFile,
       $inFile, $xslFile, $saxonParams);

и пусть интерпретатор и оболочка выяснят это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...