私はperlのコードブロックに関する質問があります。次のコードを与えます。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;
...
}
はなく、ソート機能がより複雑であることを前提としていますので、きちんと上記のコードに適合文句を言いません。
(forループのスコープ内でローカルに定義されている)関数を使用しようとすると、「ハッシュ要素で初期化されていない値を使用する」が得られます。
これは、サブが一度解析され、forループのevry反復のために再作成されないためです。私はコードブロックを実装する方法を理解しようとしています。反復ごとに再解析されるか、パラメータを渡す方法があります。
'私の@newArr =ソート{$ <=> $ B} @oldArr;' @oldArrは、これに応じて何を意味するのでしょうか? –
"しかし、ソート関数がより複雑であると仮定することができます" - >たぶんこのソート関数のコードを投稿するべきです。 – TLP