with Enumerable
RubyライクなEnumerable roleを作ってみた。
- http://github.com/gfx/Perl-Enumerable
- git clone git://github.com/gfx/Perl-Enumerable.git
#!perl package IO::Enumerable; use Any::Moose; # requires Mouse 0.39 with 'Enumerable'; has handle => ( is => 'rw', isa => 'FileHandle', ); sub each{ my($self, $block) = @_; my $handle = $self->handle; local $_; while(<$handle>){ $block->($_); } } package main; my $io = IO::Enumerable->new(handle => \*DATA); print $io->map(sub{ chomp; $_ }) ->grep(qr/^b/) ->sort ->join(' '), "\n"; # => bar baz __DATA__ foo bar baz
これはこれで便利ではあるが,これだとあまりにRuby的すぎる。Ruby的にするためにパフォーマンスが犠牲になっているので,それはまずい。CPANに上げるのはインターフェイスをもう少し考えてからにする。