自然順ソートを行うPerlワンライナー



PHPの豊富すぎる組み込みの関数の中でも、natsort関数はかなり高機能な関数の一つだと思います。他の言語なら本体に組み込まれることは有り得ないのではないでしょうか。


今回のお題は、このnatsortを使ったワンライナーです。

(from hnwの日記)

というわけで、PHPのワンライナーは引用元を参照してもらうとして、同じことをPerlでやってみた。
さすがに本体には組み込まれてないので、Sort::Naturallyの力を借りてみた。

$ ls bin/php-* | perl -MSort::Naturally -e 'print nsort <>'
bin/php-5.0.0
bin/php-5.0.1
bin/php-5.0.2
bin/php-5.0.3
bin/php-5.0.4
bin/php-5.0.5
bin/php-5.1.0
bin/php-5.1.1
bin/php-5.1.2
bin/php-5.1.3
bin/php-5.1.4
bin/php-5.1.5
bin/php-5.1.6
bin/php-5.2.0
bin/php-5.2.1
bin/php-5.2.2
bin/php-5.2.3
bin/php-5.2.4
bin/php-5.2.5
bin/php-5.2.6
bin/php-5.2.7
bin/php-5.2.8
bin/php-5.2.9
bin/php-5.2.10
bin/php-5.3.0RC2
bin/php-5.3.0RC4

Perl本体のみでは解決できてないけど、cpanコマンドひとつでサクっと入れておけばワンライナーとして十分使える簡潔さかと。


実はSort::Naturallyはデフォルトでcase-insensitiveなので、natsortではなくnatcasesort相当だったりする。
case-sensitiveにするにはcomparatorかlowercaserで小細工しないといけないので少し面倒かも。さすがPHP、かなわないぜ!