为什么有些程序员声明变量,比如my$myvariable=shift;用Perl?
我一直在关注perlmeme.org上的教程,一些作者用以下方式声明变量:为什么有些程序员声明变量,比如my$myvariable=shift;用Perl?,perl,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 ); 结果是未定义的 为什么你不能只用 my $num_disks = 9; my $source;
my $num_disks = shift || 9; # - no idea what the shift does
在像这样的循环中
my $source = shift;
my $dest = shift;
my $how_many = shift;
当你使用
print Dumper ( $source );
结果是未定义的
为什么你不能只用
my $num_disks = 9;
my $source;
my $dest;
my $how_many;
要声明变量?
shift
是一个函数,它接受数组,删除数组的第一个元素并返回该元素。如果数组为空,则返回undef
。如果shift未获得任何参数,则在子例程内部时,它会自动在@
数组上工作(否则它使用@ARGV
)
函数的参数放置在数组@
中
因此,如果我们编写一个包含两个参数的函数,我们可以使用shift键两次将它们放入变量中:
sub add {
my $a = shift;
my $b = shift;
return $a + $b;
}
现在add(3,4)将返回7
符号
my $a = shift || 1;
只是一个逻辑or。这意味着如果shift
的结果是falsy(例如,未定义、零或空字符串),则使用值1。这是给函数参数设置默认值的常用方法
my $a = shift // 1;
与前面的示例类似,但它仅在
shift()
返回undef
时指定默认值。我想第一步是找出shift
在Perl中的作用?那么您就缺少了默认情况下shift
对@
进行操作的功能,这是sub存储参数的地方。它从参数列表中弹出参数。如果arglist没有更多的arg,则使用|
操作符设置默认值。@DanLowe为什么使用my$num|u disks=shift | | 9代码>外部array@BenWhite@
是一个数组。@DanLowe:“那么默认情况下,shift
对@
进行操作时,您将丢失该数组。”。从学究的角度讲,这只在子程序中才是正确的。在子例程之外,shift
默认在@ARGV
上工作。啊,太好了,我错过了一个事实,即@uu包含函数的参数shift
的结果是falsy(例如,unde、zero或空字符串),我认为零不应该在那里,因为如果我们在子例程add中传递0
,它将把它作为0
并返回4
。但无论如何不要使用$a和$b作为函数参数,它是为函数保留的。:)