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です。