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"))
Published: 2012-08-02(Thu) 01:39