• ベストアンサー

Perlです。サブルーチンについて

以下の文はあっていますでしょうか。 # サブルーチンを呼び出して引数は 3 とする。 # そして返ってきた戻り値を変数$aに代入せよ。 $a=&a(3); # サブルーチン名aせよ。 sub a{ # $_[0]が引数 3 となりプラス1して変数$bに代入せよ。 $b=$_[0]+1; # 変数$bの内容を戻り値として返せ。 return $b; } # 変数$aの内容を表示せよ。 print "$a";

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

  • ベストアンサー
  • W_H
  • ベストアンサー率47% (21/44)
回答No.2

あっているので問題はないですが、できる限りスマートにすると、こんな感じになります。 print &a(3),"\n";#カンマで区切れる sub a{ return $_[0]+1;#ここに計算式を入れることも可能 } 主に自己設定変数の$aと$bを消しました。returnのある関数は、代入のできない変数のように扱えるため、今回のように直接print文に使えます。(ただし、""で囲むと、ただの文字になりますのでご注意を。) 中の$bは、そのままreturnの後ろに計算式を入れて、消しました。 最後に、perlのサブルーチンは最初でも、最後にも記述していいというルールがあります。(Cとかは、使うより前に関数宣言、もしくは関数を書かないと使えない。でも、perlはどこに書いていても使える。) なので、print文より後ろに書いていても実行できます。自分が読みやすいソースになるよう、いろいろ試してみてください。

その他の回答 (2)

  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.3

趣旨がずれますけど もうちょっと削れますね print a(3); sub a { $_[0]+1 } サブルーチン呼び出しに & をつけるのは Perl4の書式だし,誤解を招くこともあるので Perl5でつかうのはやめるほうがよいでしょう. 使うのはサブルーチンリファレンスのときだけかな.

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

あってますが好ましくない点が幾つか。 sort の比較関数に対する引数のプレースホルダとして 使われますので変数名として $a や $bを使うのは避けましょう。 > print "$a"; 変数をダブルクォートで括る必要はふつうはまずありません。

関連するQ&A