小智 25
在子例程中,数组@_给出传递给给定子例程的参数.例如:
use strict;
use warnings;
sub print_em
{
foreach my $arg (@_)
{
print "You passed in $arg.\n";
}
}
print_em("foo","bar","baz");
Run Code Online (Sandbox Code Playgroud)
输出是
You passed in foo.
You passed in bar.
You passed in baz.
Run Code Online (Sandbox Code Playgroud)
标量$_通常用作循环中的变量.例如:
use strict;
use warnings;
# Note that we are not declaring a variable
# that takes on the values 1 through 5.
foreach(1..5)
{
print "$_\n";
}
Run Code Online (Sandbox Code Playgroud)
输出是:
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
同样,我们可以略微重写print_em上面的子程序
sub print_em
{
foreach(@_)
{
print "You passed in $_.\n";
}
}
Run Code Online (Sandbox Code Playgroud)
或者甚至更紧凑
sub print_em{ print "You passed in $_.\n" foreach(@_);}
Run Code Online (Sandbox Code Playgroud)
该变量$_也可以用作某些函数的"默认参数".例如:
use strict;
use warnings;
$_="foobar";
if(/bar/) #We do not have to write $_=~/bar/
{
print "matched!\n";
}
Run Code Online (Sandbox Code Playgroud)
当然,这是产出matched!.
看看perldoc perlvar有关这些和Perl的其他"神奇变量"的更多信息.
小智 9
Jack Maney的回复涵盖了您的确切问题,但我也想注意一些事情:您不应该被变量的名称部分所迷惑.这个信号也很重要.$_并且@_是完全不同的变量,因为$foo和@foo,$bar以及%bar.Perl将它们彼此完全分开存储.
| 归档时间: |
|
| 查看次数: |
28031 次 |
| 最近记录: |