最近、見始めたサイトです。英語圏のPerl関連のニュースがまとまってていい感じです。
advent calendar 2013も始まりました。
新人女子プログラマの書いたコードを直すだけの簡単なお仕事です!|paizaオンラインハッカソンVol.1を、やってみました。
hirontさん、ある意味凄いコードですね。新人の私でもそうそうこんなコードかけませんよ。。
E判定より
hirontさん、凄いコードですねっ!!私にはこんな効率のいいコード書けませんっ!
S判定より
野田s……涙拭いてもいいですか。
あなたがLispを無視することができない理由より、Perlでは構文解析が必要とのことだったので、素のPerlで書けるか試してみる。
use 5.016; use warnings; package _Alias; sub TIESCALAR { bless \(my $dmy = \($_[1])), $_[0] } sub FETCH { ${${$_[0]}} } sub STORE { ${${$_[0]}} = $_[1] } package main; sub args { my @list = map{ \$_ } @_; return sub { foreach(@list){ tie ${$_}, '_Alias' => shift(); } }; } sub with { my ($methods, $hash, $f) = @_; sub{ foreach(@{$methods}){ tie $_[@_], '_Alias' => $hash->{$_}; } goto $f; }->(); } my $me = { name => "foobar", age => 26 }; with([qw(age)] => $me, sub{ args(my $age)->(@_); $age++; }); with([qw(name age)] => $me, sub{ args(my ($name, $age))->(@_); printf("I'm %s. %d years old.\n", $name, $age); });
書けない事はないけど……という感じです。