$ cat test.pl
my $pid = 5892;
my $not = system("top -H -p $pid -n 1 | grep myprocess | wc -l");
print "not = $not\n";
$ perl test.pl
11
not = 0
$
Я хочу записать результат, т.е. 11
в переменную. Как я могу это сделать?
$ cat test.pl
my $pid = 5892;
my $not = system("top -H -p $pid -n 1 | grep myprocess | wc -l");
print "not = $not\n";
$ perl test.pl
11
not = 0
$
Я хочу записать результат, т.е. 11
в переменную. Как я могу это сделать?
От Perlfaq8:
Вы путаете цель system() и backticks (``). system() запускает команду и возвращает информацию о статусе выхода (в качестве 16-битного значения: младшие 7 бит - это сигнал, с которого процесс умер, если таковой имеется, и высокие 8 бит являются фактическим значением выхода). Backticks (``) запускают команду и возвращают то, что она отправила в STDOUT.
$exit_status = system("mail-users");
$output_string = `ls`;
Существует множество способов выполнения внешних команд с Perl. Наиболее распространенными значениями являются:
Самый простой способ - использовать функцию ``
в Perl. Это выполнит то, что внутри, и вернет то, что было напечатано в stdout:
my $pid = 5892;
my $var = `top -H -p $pid -n 1 | grep myprocess | wc -l`;
print "not = $var\n";
Это должно сделать это.
Попробуйте использовать qx{command}
, а не обратные ссылки. Для меня это немного лучше, потому что: вы можете делать SQL с ним и не беспокоиться об ускорении кавычек и т.д. В зависимости от редактора и экрана мои старые глаза, как правило, пропускают крошечные обратные тики, и у него никогда не должно быть проблем с перегрузкой, например, с помощью угловых скобок и глобуса.
Использование backtick
или qx
помогает, спасибо всем за ответы. Однако я обнаружил, что если вы используете backtick
или qx
, вывод содержит завершающую новую строку, и мне нужно удалить это. Поэтому я использовал chomp
.
chomp($host = `hostname`);
chomp($domain = `domainname`);
$fqdn = $host.".".$domain;
Дополнительная информация здесь: http://irouble.blogspot.in/2011/04/perl-chomp-backticks.html