как передать аргументы из Perl-скрипта в Bash-скрипт - PullRequest
1 голос
/ 06 сентября 2011

я пытаюсь использовать grep в perl, но мне нужно получить аргументы от perl, чтобы использовать их с опциями grep, я делаю это

#!/usr/bin/perl 
system(grep -c $ARGV[0] $ARGV[1]);

это выдает ошибку, как это можно реализовать?

Ответы [ 3 ]

7 голосов
/ 06 сентября 2011
system('grep', '-c', $ARGV[0], $ARGV[1]);

Но подумай, хочешь ли ты это сделать? Perl может сам многое делать, не вызывая внешние программы.

0 голосов
/ 07 сентября 2011

Вы можете не получить то, что ожидаете от этого кода. От perldoc -f system:

The return value is the exit status of the program as returned by 
the "wait" call.  

system на самом деле не даст вам счет от grep, только возвращаемое значение из процесса grep.

Чтобы использовать значение внутри perl, используйте qx() или обратные галочки. Э.Г.

my $count  = `grep -c ... `;
# or
my $count2 = qx(grep -c ...);

Имейте в виду, что это даст вам новую строку после номера, например, "6 \ п".

Однако, почему бы не использовать все Perl?

my $search = shift;
my $count;
/$search/ and $count++ while (<>);
say "Count is $count";

Неявный open, выполняемый оператором алмаза <>, может быть опасным в чужих руках. Вместо этого вы можете открыть файл вручную с открытым три аргумента:

use autodie;
my ($search, $file) = @ARGV;
my $count;
open my $fh, '<', $file;
/$search/ and $count++ while (<$fh>);
say "Count is $count";
0 голосов
/ 06 сентября 2011

Аргументом system() должна быть строка (или список строк).Попробуйте:

#!/usr/bin/perl 
system("grep -c $ARGV[0] $ARGV[1]");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...