perlのコードブロックについて質問があります。次のコードが与えられます:
my @newArr = sort { $a <=> $b } @oldArr;
引数としてコードブロックを使用します。
私はそれを次のように書き直すことができます:
sub sortFunc {
return $a <=> $b;
}
my @newArr = sort sortFunc @oldArr;
私はこのメカニズムがどのように機能するかを理解しようとしています。現在、コードブロックで乱雑に見える一種の複雑なソート関数を実装する必要がありますが、それはいくつかのローカル変数に依存します。例えば:
foreach my $val (@values){
my @newArr = sort { $hash{$a}{$val}<=> $hash{$b}{$val} } @oldArr;
...
}
ただし、sort関数はより複雑であるため、上記のコードにうまく適合しないと仮定します。
関数(forループのスコープでローカルに定義されている)を使用しようとすると、「ハッシュ要素での初期化されていない値の使用」が発生し続けます。
これは、subが1回解析され、forループのevry反復では再作成されないためだと思います。反復ごとに再解釈されるコードブロックを実装する方法、またはパラメーターを渡す方法を理解しようとしています。