메신저 bash는 스크립트에 펄 스크립트의 인수를 전달합니다,하지만 난 메신저이어떻게 펄에서 그렙를 사용하려고
#!/usr/bin/perl
system(grep -c $ARGV[0] $ARGV[1]);
이 오류가 발생하고, 그렙 옵션을 사용하는 펄에서 인수를 받아 봐해야 어떻게 구현할 수 있습니까?
메신저 bash는 스크립트에 펄 스크립트의 인수를 전달합니다,하지만 난 메신저이어떻게 펄에서 그렙를 사용하려고
#!/usr/bin/perl
system(grep -c $ARGV[0] $ARGV[1]);
이 오류가 발생하고, 그렙 옵션을 사용하는 펄에서 인수를 받아 봐해야 어떻게 구현할 수 있습니까?
system('grep', '-c', $ARGV[0], $ARGV[1]);
하지만 그렇게하고 싶은지 생각해보십시오. Perl은 외부 프로그램을 호출하지 않고도 많은 것을 할 수 있습니다.
참조 .bashrc' http://stackoverflow.com/questions/3477916/using-perls-system/3478060 # 3478060 오류 처리. – daxim
system()
의 인수는 문자열 (또는 문자열 목록)이어야합니다. 시도해보십시오 :
#!/usr/bin/perl
system("grep -c $ARGV[0] $ARGV[1]");
목록 양식이 더 안전합니다. 누군가가' '의 첫 번째 인수를 사용하여 스크립트를 호출했을 가능성을 고려하십시오. rm -rf $ HOME''. 스크립트가 추가 권한 (사용자가'rm -rf $ HOME'을 직접 실행할 수도 있음)으로 실행하지 않는 한 그다지 문제가되지 않습니다.하지만 생각할 가치가 있습니다. 단일 문자열 형식은 명령을 실행하기 위해 셸을 호출해야하는 경우 유용합니다. 예를 들어,'system ("command1 | command2")'*는 Perl로 할 수 있지만, 많은 작업이 필요합니다. 'perldoc -f system' –
'script.pl '과 같은 간단한 일도 실패합니다. "file 할 수 없습니다." – ikegami
해당 코드에서 기대하는 것을 얻지 못할 수도 있습니다. perldoc -f system
에서 :
The return value is the exit status of the program as returned by
the "wait" call.
system
실제로 grep
에서 당신은 grep 과정에서 불과 반환 값을 카운트를 제공하지 않습니다.
perl 내에서 값을 사용할 수 있으려면 qx()
또는 backticks를 사용하십시오. 예 :
my $count = `grep -c ... `;
# or
my $count2 = qx(grep -c ...);
숫자 뒤에 개행 문자가 표시됩니다. "6 \ n".
그러나 모든 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";
'별명 grepc = '그렙 -c $ @''에서' – ikegami