当我修剪字符串时,我通常不想保留原件。拥有 sub 的抽象但也不必对临时值大惊小怪。
事实证明,我们可以做到这一点,正如perlsub解释的那样:
传入的任何参数都显示在数组中@_
。因此,如果您调用带有两个参数的函数,它们将存储在$_[0]
and中$_[1]
。该数组@_
是一个本地数组,但它的元素是实际标量参数的别名。特别是,如果一个元素$_[0]
被更新,相应的参数也会被更新(或者如果它不可更新,则会发生错误)。
在你的情况下,trim
变成
sub trim {
for (@_) {
s/^ \s+ //x;
s/ \s+ $//x;
}
wantarray ? @_ : $_[0];
}
记住map
andfor
是堂兄弟,所以有了循环trim
,你不再需要map
. 例如
my $line = "1\t 2\t3 \t 4 \t 5 \n";
my ($a, $b, $c, $d, $e) = split(/\t/, $line);
print "BEFORE: [", join("] [" => $a, $b, $c, $d), "]\n";
trim $a, $b, $c, $d;
print "AFTER: [", join("] [" => $a, $b, $c, $d), "]\n";
输出:
之前:[1] [2] [3] [4]
之后:[1] [2] [3] [4]