Perl 将(shift |';';)应用于变量
我目前正在学习perl,当我遇到一段解释如何使用递归子例程遍历目录树的代码时。这就是问题中的代码Perl 将(shift |';';)应用于变量,perl,Perl,我目前正在学习perl,当我遇到一段解释如何使用递归子例程遍历目录树的代码时。这就是问题中的代码 use strict; use warnings; use 5.010; my $path = shift || '.'; traverse($path); sub traverse { my ($thing) = @_; return if not -d $thing; opendir my $dh, $thing or die; while (my $sub = re
use strict;
use warnings;
use 5.010;
my $path = shift || '.';
traverse($path);
sub traverse {
my ($thing) = @_;
return if not -d $thing;
opendir my $dh, $thing or die;
while (my $sub = readdir $dh) {
next if $sub eq '.' or $sub eq '..';
say "$thing/$sub";
traverse("$thing/$sub");
}
close $dh;
return;
}
我理解子程序及其工作原理,但我不理解以下语句:
(我的$path=shift | |'。)
我知道传递给子例程的是变量,但我不知道它取什么值。提前感谢。该语句说:“从参数列表中提取下一个元素,并将其分配给$path
。如果列表中没有参数,或者第一个元素的计算结果为false,请将
放在$path
中。”
shift
,当在程序的主要部分中使用而不是在子例程中使用时,使用@ARGV
(命令行参数)作为其列表,将shift
元素移出
use warnings;
use strict;
my $x = shift || 'bye';
print "$x\n";
运行它:
$ perl script.pl
bye
$ perl script.pl hi
hi
在子例程之外,不带参数的
shift
执行shift@ARGV
,获取第一个命令行参数
如果左侧为truthy,则|
运算符返回左侧;如果左侧为falsy,则返回右侧。因此,如果shift
成功,$path
可能会设置为命令行参数。如果@ARGV
为空,shift
返回unde
,因此$path
将被设置为。
注意:例如,如果您有一个名为“0”的目录,并试图运行myscript.pl 0
,那么这将导致错误