为什么有些程序员声明像my myvariable = shift这样的变量;在Perl?

时间:2015-07-16 13:41:34

标签: perl

我一直在关注perlmeme.org上的教程,一些作者以下列方式声明变量:

my $num_disks = shift || 9; # - no idea what the shift does

并在循环中

my $source = shift;
my $dest = shift;
my $how_many = shift;

使用时

print Dumper ( $source ); 

结果是undef

为什么不能只使用

my $num_disks = 9;
my $source;
my $dest;
my $how_many;

声明变量?

1 个答案:

答案 0 :(得分:11)

shift是一个接受数组的函数,删除它的第一个元素并返回该元素。如果数组为空,则返回undef。如果shift没有参数,那么它在子程序内部时会自动在@_数组上运行(否则它使用@ARGV)。

函数的参数放在数组@_中。

因此,如果我们编写一个带有两个参数的函数,我们可以使用shift两次将它们放入变量中:

sub add {
    my $a = shift;
    my $b = shift;
    return $a + $b;
}

现在添加(3,4)将返回7.

符号

my $a = shift || 1;

只是一个逻辑或。这表示如果shift的结果是假的(例如,undef,零或空字符串),则使用值1.这是给函数参数提供默认值的常用方法。

my $a = shift // 1;

与上一个示例类似,但仅当shift()返回undef时才会指定默认值。