Kaylan2011/06/05 17:53I feel so much hpiaper now I understand all this. Thanks!
yxvhwf2011/06/06 18:367TkqkA <a href="http://vczqxrylwguo.com/">vczqxrylwguo</a>
jfgaxz2011/06/06 23:21YLYH4f , [url=http://fzmsoxvseari.com/]fzmsoxvseari[/url], [link=http://tnrlqhqdlchj.com/]tnrlqhqdlchj[/link], http://phnzptgwiqer.com/
eqlfsgsz2011/06/06 23:221keSIq , [url=http://jitzasaeitsb.com/]jitzasaeitsb[/url], [link=http://piwyhugunjcb.com/]piwyhugunjcb[/link], http://yzhwxarceget.com/
zwfoao2011/06/07 17:57YTBjFn <a href="http://wfmvcvbakhwj.com/">wfmvcvbakhwj</a>
btywvaedmy2011/06/09 19:18gZNvYU , [url=http://fubrnkibwjjr.com/]fubrnkibwjjr[/url], [link=http://yogfkdfkubli.com/]yogfkdfkubli[/link], http://oqpytjpbhoor.com/
なんか面白い問題見つけたので解いてみました。
Perl Quiz 2010-03-19 - Quill.to/yoshiki
#XXX を埋めよ(できれば1行) use strict; use Data::Dumper; sub foo { my ( $a_ref, $key, $value ) = @_; #XXX return $a_ref; } my $ref = { foo => { bar => { baz => 1, }, }, }; $ref = foo( $ref, 'foo.bar.baz', 100 ); warn Dumper $ref; # 結果 # $VAR1 = { # 'foo' => { # 'bar' => { # 'baz' => 100, # }, # }, # };
sub foo { my ( $a_ref, $key, $value ) = @_; #XXX $a_ref->{$_[0]}->{$_[1]}->{$_[2]} = $value if (@_ = split /[.]/, $key); return $a_ref; }
簡単でした。
こんな感じらしい。
#!/usr/bin/perl use strict; use warnings; # 事前に$hogeを宣言しておく必要あり my $hoge; $hoge = sub { my $foo = shift; print "$foo\n"; if ($foo >= 100) { return; } # 引数を渡せないので直接@_に引数を送り込む push @_, ++$foo; goto &$hoge; }; $hoge->(1); # 循環参照になるので明示的に$hogeをundefにしてやる undef $hoge;
こうすると確かにDeep recursionにはならない。
【追記】
ブクマのコメントで指摘されているように$numは$startの誤記です。
コード貼り付けてから変数名がキモいと思って変えたのですが変え忘れてました。
恥ずかしい…。
コード自体には意味はないですが少し気になったので。
#!/usr/bin/perl use strict; use warnings; sub fizzbuzz { my $start = shift; my $end = shift; if ($start > $end) { return; } if ($start % 15 == 0) { print "FizzBuzz\n"; } elsif ($start % 3 == 0) { print "Fizz\n"; } elsif ($start % 5 == 0) { print "Buzz\n"; } else { print "$start\n"; } fizzbuzz($start + 1, $end); } fizzbuzz(1, 100);
これを実行すると途中で
Deep recursion on subroutine "main::fizzbuzz"
って出てくるからたぶん末尾再帰最適化ってされてないのかなと思うんですがどうなんでしょう。