List::Haystack - A immutable list utility to find and count element
Perl5の話題です.List::Haystackというものを書きました.CPANにもアップロードしています.
経緯としては以下.
Perl,immutableな感じで,List (Array) 中から要素をfindしたり,出現回数を取るモジュールって存在しているんでしたっけ
— パブリックイメージが悪い (@moznion) 2017年6月20日
`my $haystack = List::XXX->new([...]); $haystack->find('java');` みたいな感じで, `$haystack` はimmutableな存在で都度スキャンしないではやく返してくれる,みたいな
— パブリックイメージが悪い (@moznion) 2017年6月20日
というものが欲しかったのです.List内の要素検索について,Immutableに処理をしたい + lazilyに処理したい,みたいなモチベーションです.
個別の使い方としてはpodを読んでもらうとして,例えば以下のように書くだけでシェークスピアのワードカウントなんてのを手っ取り早く書けるわけです.皆さん大学とかでやりましたでしょう.僕はやりませんでした.
use LWP::UserAgent (); use List::Haystack; use Data::Dumper; my $response = LWP::UserAgent->new->get('https://ocw.mit.edu/ans7870/6/6.006/s08/lecturenotes/files/t8.shakespeare.txt'); my $txt = $response->decoded_content; my $words = [grep { $_ } split /[^a-zA-Z0-9]/, $txt]; # XXX: Sloppy word separation!!! my $haystack = List::Haystack->new($words); print Dumper($haystack->haystack);
まあこういうのってperlだとHashとかで簡単に書けるんで別にモジュールにしなくても……と言う感じですが,アドホックに書くと同じような処理が随所に散らばってしまいがちで精神衛生上良くなかったので一丁モジュールにしたためた次第です.あとlazilyなconstructionが欲しかったので.
ご利用くださいませ.