• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:サブルーチンの@_とreturn)

サブルーチンの@_とreturn

このQ&Aのポイント
  • $aaを使ったサブルーチンの実行例とその結果の出力方法を説明します。
  • @_はサブルーチン内で受け取った引数を格納する配列であり、@_の要素には引数が順番に代入されます。
  • return文はサブルーチンから戻るときに呼び出し元へ値を返すために使用されます。

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

  • ベストアンサー
  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.1

まず、書かれているスクリプトに一部書き間違いと思われるところがありますので、そちらを修正しますね。 2 : $kekka_sub_1 = $sub_1($aa); 3 : $kekka_sub_2 = $sub_2($aa); は $kekka_sub_1 = &sub_1($aa); $kekka_sub_2 = &sug_2($aa); ですね。 引数というのは、関数へジャンプするときに 一緒に持っていく変数や値の事です。 たとえば、このスクリプトですと2行目、3行目の$aaの部分が引数に当たります。 Perlでは関数を呼び出すときに自動的に引数が@_という配列になります。 なので、引数は関数側ではその配列の添え字を利用して、 @_[0]  # 一つ目の引数 @_[1]  # 二つ目の引数 という感じで値を受け取るんです。 このスクリプトでは、値を受け取るときに ($aa) = @_; となっていますが、これは $aa = @_[0]; と同じ意味になります。 split関数の記述を思い出してくださればご理解いただけると思います。 でも後者の方がわかりやすいと思いますよ。 もっと言えば、このままだとこの$aaと関数を呼び出す時に使用した$aaは同じ物とみなされてしまうので、関数の中で$aaの中身を変えてしまったら、関数の外の$aaの中身も変わってしまいます。 それを防ぐ為には local($aa) = @_[0]; として、「これはこの関数の中だけで使う変数なんだ」と書いてやる必要があります。 returnですが、これは「戻り値」と言いまして、関数から抜けるときに一緒に持って変える値の事です。(この場合$aa) その値はこの例ですと$kekka_sub_2 = &sub_2($aa); の$kekka_sub_2 に格納される事になります。 sub1では受け取った値("hello")を"Hanako!"と連結させて返しているんです。 実際にこのスクリプトを動かしてみると、よくわかると思いますよ。 長々と失礼しました。

alemania
質問者

お礼

yuizuianさん、とってもとっても分かりやすい解説ありがとうございます。 ものすごく分かりやすいので、ひとつひとつ何度も読んでます。 こんな参考書があったらいいんですけど、探すのが下手なのか、それとも私が理解できなさ過ぎなのか・・・・。 とにかく、ありがとうございます。本当に助かりました。

関連するQ&A