2011-06-26 8 views
6
my @output = 
map $_->[0], 
sort{$a->[1] <=> $b->[1]} 
map [$_,-s $_],  
@array; 

誰かがコードを詳しく説明できますか?PerlでSchwartzian変換?

@array 

配列(ファイル名の、後で使用する与えられた):私は

答えて

10

読むがあります。..ヘッドまたはそれの尾を取得することはできません。

map [$_,-s $_], 

は各ファイル名について、最初の要素は、ファイル名と、第2の要素、ファイルのバイトサイズであると、2つの要素無名配列への参照を取得します。 mapはこれらの配列参照のリストを返します。

sort{$a->[1] <=> $b->[1]} 

ファイルサイズを大きくすることによって配列参照のリストをソートします。

map $_->[0], 

配列参照のリストをファイル名のリストに戻しますが、ソート順に戻します。

my @output = 

リストを@出力に保存します。

これはと機能的に同等です:

my @output = sort { -s $a <=> -s $b } @array; 

だけソートによって行わ比較毎に一度の代わりに、一度、各ファイルのサイズを取得します。

+0

「<=>」はどういう意味ですか? –

+1

@ compile-fan「宇宙船」演算子「<=>」は、2つの引数を比較し、1,0より大きいか等しいか小さいかを意味する1,0または-1を返します。 – TLP

+1

あなたは 'perldoc perlop'を通して慣れないオペレータを調べることができます。 「<=>」演算子は、「等価演算子」セクションの下にあります。 http://perldoc.perl.org/perlop.html#Equality-Operators – friedo

関連する問題