perl6 memo
array etc..
$ perl6 -e 'say ("a".."z")[5]' f $ perl6 -e 'say first-index { $_ > 5 }, (1..10)' 5 $ perl6 -e 'say [+] 1..10' 55 $ perl6 -e 'say join ",", 1..10 ' 1,2,3,4,5,6,7,8,9,10 $ perl6 -e 'for 1..10 -> $x {say "[$x]";}' [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] $ perl6 -e '(1..10).reverse.say' 10 9 8 7 6 5 4 3 2 1 $ perl6 -e 'say join ":",map {$_ * 2}, (1..10).reverse' 20:18:16:14:12:10:8:6:4:2 $ perl6 -e 'my @x=(1..4);unshift(my @y,pop(@x));push(@y,shift(@x));say join ",",@y' 4,1 $ $ perl6 -e "my @x = 1,2,3,4,5; say @x[*-1]" 5 $
hash etc..
$ perl6 -e 'my %hash = "a"=>1,"i"=>2,"u"=>3,"e"=>4,"o"=>5;for %hash.kv -> $k,$v { say "$k:$v"}' a:1 i:2 u:3 e:4 o:5 $ perl6 -e 'my %hash = "a"=>1,"i"=>2,"u"=>3,"e"=>4,"o"=>5;say %hash' ("a" => 1, "e" => 4, "i" => 2, "o" => 5, "u" => 3).hash $ perl6 -e 'my %hash = "a"=>1,"i"=>2,"u"=>3,"e"=>4,"o"=>5;say %hash<u>' 3 $ perl6 -e 'my %hash = "a"=>1,"i"=>2,"u"=>3,"e"=>4,"o"=>5;say %hash.keys' a i u e o $ perl6 -e 'my %hash = "a"=>1,"i"=>2,"u"=>3,"e"=>4,"o"=>5;say %hash.values' 1 2 3 4 5 $
tertiary operator
$ perl6 -e 'say map {($_%3??""!!"foo") ~ ($_%5??""!!"baz") or $_},1..31' 1 2 foo 4 baz foo 7 8 foo baz 11 foo 13 14 foobaz 16 17 foo 19 baz foo 22 23 foo baz 26 foo 28 29 foobaz 31 $
perl5 vs perl6
微妙な違いがあって…
$ perl -E 'say join ",",map {$_*2} (1..5) x 2' 2,4,6,8,10,2,4,6,8,10 $ $ perl6 -e 'say join ",",map {$_*2},(1..5) xx 2' 2,4,6,8,10,2,4,6,8,10 $ $ perl -E 'say "ABC" . "DEF"' ABCDEF $ $ perl6 -e 'say "ABC" ~ "DEF"' ABCDEF $
コマンドライン
- ハノイの塔 (う〜ん。なんか面倒くさい)
$ perl -E 'sub h{return if(!$_[0]);push(@_,$_[0]-1);h(@_[-1,1,3,2,4]);$_[4]->(@_);h(@_[-1,2,1,3,4]);} h(pop,A..C,sub {say "$_[1]($_[0])=>$_[3]";})' 3 A(1)=>C A(2)=>B C(1)=>B A(3)=>C B(1)=>A B(2)=>C A(1)=>C $ perl6 -e 'sub h{return if !@_[0] ;push(@_,@_[0]-1);h(@_[5,1,3,2,4]);@_[4].(@_);h(@_[5,2,1,3,4]);};sub MAIN($x){h($x ,"A".."C",sub {say "@_[1]\(@_[0]\) =\> @_[3]";})}' 3 A(1) => C A(2) => B C(1) => B A(3) => C B(1) => A B(2) => C A(1) => C $
コマンドラインの引数をチェックしてくれるらしい
$ perl6 -e 'sub MAIN($a,$b){say $a**$b;}' Usage: -e '...' <a> <b> $ perl6 -e 'sub MAIN($a,$b){say $a**$b;}' 2 Usage: -e '...' <a> <b> $ perl6 -e 'sub MAIN($a,$b){say $a**$b;}' 2 4 16 $ perl6 -e 'sub MAIN($a,$b){say $a**$b;}' 2 4 5 Usage: -e '...' <a> <b> $
- ディスパッチ
$ perl6 -e 'multi MAIN("add",$x,$y){say $x+$y};multi MAIN("sub",$x,$y){say $x-$y;};multi MAIN("div",$x,$y){say $x/$y;}' add 2 3 5 $ perl6 -e 'multi MAIN("add",$x,$y){say $x+$y};multi MAIN("sub",$x,$y){say $x-$y;};multi MAIN("div",$x,$y){say $x/$y;}' sub 2 3 -1 $ perl6 -e 'multi MAIN("add",$x,$y){say $x+$y};multi MAIN("sub",$x,$y){say $x-$y;};multi MAIN("div",$x,$y){say $x/$y;}' div 2 3 0.666667 $
正規表現で素因数分解する
$ perl -E 'sub f{my $x=shift;my @ans =();my $N=('o' x $x);for(;$N=~/^(oo+?)\1+$/;$N=~s/$1/o/g){push(@ans,length($1));}push(@ans,length($N)); join("x",@ans);} say f(102);' 2x3x17 $ $ perl6 -e 'sub f($x){my @ans =();my $N= "o"x$x;my $s;loop (;$N ~~ /^(oo+?)$0+$/;$N ~~ s:g/$s/o/) {$s=$0;push(@ans,chars($s));};push(@ans,chars($N)); join("x",@ans);} ;say f(102);' 2x3x17 $
- 計算で求める
$ perl6 -e 'my @a; sub f{ my ($x,$y)=@_[0,1]; if $y > sqrt($x) { return push(@a,$x); }; if $x%$y { f($x,$y+1); } else { push(@a,$y); f($x/$y,$y); } }; sub MAIN($x){ f($x,2); say join "x",@a; }' 10920 2x2x2x3x5x7x13 $
正規表現
$ perl -E 'say join ":","2015/08/01" =~ m|(\d+)/(\d+)/(\d*)|' 2015:08:01 $ $ perl6 -e 'say "2015/08/01" ~~ /(\d+)\/(\d+)\/(\d+)/' 「2015/08/01」 0 => 「2015」 1 => 「08」 2 => 「01」 $
何が返ってきてるの? (何オブジェクト?)
飛び出せperl6
ステエレオグラムワンライナー
$ perl -e '($x,$y)=@ARGV; for$i(1..10){for$j(1..7){($i==9 and $j==6)?print "$y ":print "$x "} print "\n";}' ...perl... ..perl6... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ..perl6... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... $
$ perl6 -e 'sub MAIN($x,$y){ for 1..10 -> $i { for 1..7 -> $j { print ($i==9 and $j==6)??"$y "!!"$x ";}; print "\n";}}' ...perl... ..perl6... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ..perl6... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... ...perl... $
JSONシリアライズとデシリアライズ
$ perl6 -MJSON::Tiny -e 'say from-json(q{ { "a": 42 } }).perl; say to-json { a => [1, 2, <b>] };' {:a(42)} { "a" : [ 1, 2, "b" ] } $
- 無精・短気・傲慢