弦をトリミングするとき、元の状態を維持したくないことがよくあります。サブルーチンの抽象化があればいいのですが、一時的な値に煩わされる必要もありません。
perlsubが説明しているように、まさにこれができることがわかりました:
渡された引数は配列に表示され@_
ます。したがって、2 つの引数で関数を呼び出した場合、それらは と に格納され$_[0]
ます$_[1]
。配列@_
はローカル配列ですが、その要素は実際のスカラー パラメーターのエイリアスです。特に、要素$_[0]
が更新されると、対応する引数が更新されます (更新できない場合はエラーが発生します)。
あなたの場合trim
、
sub trim {
for (@_) {
s/^ \s+ //x;
s/ \s+ $//x;
}
wantarray ? @_ : $_[0];
}
map
と はいとこであることを覚えておいてくださいfor
。したがって、 のループでは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]