2014-09-26 2 views
0

Всекомандной оболочки внутри Perl Script

я следующая команда оболочки работает в соответствии с ожиданием на скорлупе, но не работает, когда вызывается внутри Perl

команды

Shell:

grep -P -s -irl --include \*.v "\s+hello\s?[(].*" <PATH> 

работает отлично

Внутренний Perl:

$inst_search = `grep -P -s -irl --include \*.v "\s+$inst\s?[(].*" @plt_dirs`; 

не работает

Я подозреваю, что у меня что-то отсутствует с регулярным выражением внутри grep..пожалуйста, исправьте меня!

Спасибо, Вивек

+0

Проверьте это ... Если это поможет вам или нет: http://stackoverflow.com/questions/3200801/how-can-i-call-a-shell-command-in-my-perl-script – Praveen

+0

Perl имеет встроенный 'grep'. Я бы предложил использовать это вместо утечки оболочки. – Sobrique

+0

@ Praveen: Это сочтено полезным .. и решить мою проблему .. Спасибо! –

ответ

0

Perl избегает специальных символов оболочки при вызове exec/system/qx (или backticks) со строкой.

Попробуйте использовать функции exec или system, но передайте список, например.

system('grep', '-P', '-s', '-irl', '--include', '\*.v', '"\s+hello\s?[(].*"', @plt_dirs); 

Вы также можете посмотреть на модуль, который делает некоторые обработки для вас, как и IPC :: System Error :: Simple.

0

Попробуйте это:

$inst_search = qx#grep -P -s -irl --include \*.v "\s+$inst\s?[(].*" @plt_dirs#; 

Или использовать любой другой не алфавитно-цифровой символ вместо "#" для цитирования.

Смежные вопросы