2013-04-02 3 views
0

Я пытаюсь выполнить это в моем PERL скриптошибка синтаксиса около неожиданного токена `| ' код Perl

my $command = `ps -p $pidnumber | wc -l`; 

но когда я запускаю скрипт, покажите мне что-то вроде этого:

ш: -c: Строка 1: ошибка синтаксиса около неожиданной токен `| '

sh: -c: line 1: `| wc -l '

Возможно, это будет ошибка?

+8

Где $ pidnumber приходит? Может быть, к нему добавлена ​​новая строка? – RickF

ответ

1

$pidnumber конец с новой линией? См. Функцию chomp.

1

попытка печати, прежде чем выполнить команду, потому что $pidnumber может иметь что-то странное:

my $command_str = "ps -p $pidnumber | wc -l"; 
print $command_str, "\n"; 
my $command = qx!$command_str!; 

, как @mob сказал, использовать Chomp, если новая строка появляется в печати предложения.

+0

'использовать данные :: Dumper; local $ Data :: Dumper :: Useqq = 1; print (Dumper ($ command_str)); 'для более полезной при поиске странностей, особенно для трейлинговых строк. – ikegami

1

Я согласен с другими ответами, что дополнительная новая строка перед трубой, вполне возможно, причиной

Но команда на самом деле не нужна труба!

сила цитируемых команд вернуть его значение в виде списка, а затем получить длину списка и у вас есть туалет -l «количество строк» ​​

my $command_str = "ps -p $pidnumber"; 
my $linecount =() = qx!$command_str!; 
Смежные вопросы