Juk*_*dan 3 perl shift subroutine
我正在学习Perl并且正在尝试编写一个脚本,该脚本将模式和文件列表作为命令行参数并将它们传递给子例程,然后子例程打开每个文件并打印与模式匹配的行.以下代码有效; 但是,它在从第一个文件打印行后停止,甚至没有触摸第二个文件.我在这里错过了什么?
#!/usr/bin/perl
use strict;
use warnings;
sub grep_file
{
my $pattern = shift;
my @files = shift;
foreach my $doc (@files)
{
open FILE, $doc;
while (my $line = <FILE>)
{
if ($line =~ m/$pattern/)
{
print $line;
}
}
}
grep_file @ARGV;
Run Code Online (Sandbox Code Playgroud)
Shift会弹出参数中的元素(请参阅:http://perldoc.perl.org/functions/shift.html).
所以@files只能包含一个值.
尝试
sub foo
{
my $one = shift @_;
my @files = @_;
print $one."\n";
print @files;
}
foo(@ARGV);
Run Code Online (Sandbox Code Playgroud)