perlでcoffeescriptの分割代入

cpanizeはしてないけど、とりあえずgithubにはあげた。
https://github.com/hirokidaichi/p5-Data-Destructuring-Assignment

分割代入ってなにかというと"分割"して "代入"できるという機能です。

詳しくは
http://coffeescript.org/#destructuring
ここを参照


destruct([\my $hoge,\my $fuga]) = [10,20];
print "hoge is $hoge";# hoge is 10
print "fuga is $fuga";# fuga is 20

こんな風に左辺に構造をもって、右辺の構造とマッチングして、代入することができます。

destruct( \my $hoge ) = 10;

変数はリファレンスで渡してください。

destruct( [\ $a ,\ $b] ) = [$b,$a];

swapもこんなに簡単。

destruct( { hash => \my $hash } ) = { hash => [1,2,3]};

hashrefもできます。

my @array =  map{ +{ hoge => "$_",fuga => $_ * 2}} (1..10);

while(destruct({ hoge => \my $hoge } ) = shift @array) {
    # $hoge..;
}

while句の中で。

my @array =  map{ +{ hoge => "$_",fuga => $_ * 2}} (1..10);
for my $elem (@array){
    destruct({ hoge => \my $hoge, fuga => \my $fuga}) = $elem;
}

for文とともに

my $template = { hoge => 1,fuga => 2};
if( destruct({ hoge => \my $hoge ,piyo => \my $fuga }) = $template ){
    ::pass 'matched any';
}else {
    # not come here
}

if文の中ではこう。一個でもmatchするとtrueです。