Re: CSVMapperすごすぎる.
http://hitode909.hatenablog.com/entry/2012/08/01/233613
Perlだとselfって書きまくらないといけないとか,こう呼べるけどなんでこう呼べるのか分からないとか,
ってあるけど、このケースだと $self ってかかなきゃいけないケースというのがおもいつかない。。__PACKAGE__ ならわかるけど。
あと、同等の処理はべつに Perl5 でもシンプルにかけるのであった。
use strict; use warnings; use utf8; use 5.016000; package CSVMapper { use parent qw(Exporter); our @EXPORT = qw/column load/; our %DAT; sub column { my ($name, $pos) = @_; $DAT{caller(0)}->[$pos] = $name; } sub load { my ($class, $str) = @_; my @row = split /,/, $str; # てぬき my %retval; for (0..@row-1) { if (my $name = $DAT{$class}->[$_]) { $retval{$name} = $row[$_]; } } return \%retval; } } 1;
use warnings; use utf8; use 5.016000; use autodie; use Data::Dumper; sub p { say Dumper(@_) } package MyCSV { use CSVMapper; column 'name', 0; column 'ipaddr', 1; column 'file_path', 2; column 'time', 3; } p(MyCSV->load("name1,127.0.0.1,./tmp/path/to/file.txt,2012/01/01"))