• ベストアンサー

シンプルな書き方

perlは、すごく楽に書けると聞きました。 たとえば、以下のソースをもっとシンプルに書くことはできますか? ---------------------------------------- sub Kaijyou() { if(@_[0]==1){return 1;} return @_[0]*&Kaijyou(@_[0]-1); } $Str=<STDIN>; print "=".&Kaijyou($Str); <STDIN>#待ち ---------------------------------------- また、こうはできないですね? sub Kaijyou() { if(@_[0]==1){return 1;} return @_[0]*&Kaijyou(@_[0]-1); } print "=".&Kaijyou($<STDIN>;); <STDIN>#待ち 何故でしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

sub Kaijyou() { return (@_[0]==1)? 1 : @_[0]*&Kaijyou(@_[0]-1); } print "=".&Kaijyou($Str=<STDIN>); <STDIN>#待ち ------------------------------------------------- とか

noname#16581
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • taseki
  • ベストアンサー率66% (155/233)
回答No.1

@_[0] は $_[0] の間違いではないでしょうか。 シンプルに、という意味では、ここまで短いなら不要な気がしますが、正直ちょっと解りにくいソースな気がしてしまいます。再起呼び出しは1ずつ繰り返し減算するためだけでしょうか。 $<STDIN>はコンテキストによって挙動が異なるため、やはり変数に読み込むのが良いかと思います。

noname#16581
質問者

お礼

ありがとうございました。