気の向くままに辿るIT/ICT/IoT
Perl

Perl サブルーチン/関数呼び出し function call

ホーム前へ次へ
Perlサブルーチン・関数呼び出し/ファンクションコールとは?

Perlサブルーチン・関数呼び出し/function call

関数呼び出しとは

 関数呼び出しは、ファンクションコール、プロシージャコールと呼ばれることもありますが、関数を呼ぶことを指しています。

Perlの関数はルーチン・サブルーチン

 Perlの関数には「ファンクション:Function」はなく、全て「サブ:sub」であり、関数にあたるものは伝統的なPerlではルーチン/サブルーチンと呼び、オブジェクト指向Perl(OO Perl)ではメソッドと呼びます。

サブルーチン呼び出し

 Perlのサブルーチンを呼び出すには呼び出す関数名の前に『&』をつけて


  &foo;
  &bar(arg1,arg2);

のように記述し、戻り値を受け取る場合には、


  @hoge=&abc;
  $hogehoge=&xyz(arg1,arg2);

のように記述します。

 この『&』はバージョンと状況によっては記述しなくてもよいケースもありますが、あとで編集する時に(関数コール部なんだと)わかりやすいなどのメリットもあるのでつけた方がよいと思います。

 また一方で『&』の省略が可能である場合においては、『&』を付加するとプロトタイプと実際のサブルーチン利用時の引数の種類が一致しているか否かのチェックがOFFになるようなので、そういう意味では省略した方が安全だと思いますのでその場合は省略した方がよいでしょう。

 Perlにはスカラー変数($)、数値キー型配列(@)、文字列キー型配列(%)などの変数があり、呼び出し元からサブルーチンに渡す引数やサブルーチンから呼び出し元に返す値が変数である場合、そのまま渡すと実体値が格納された変数を、それぞれ[\$value]、[\@array]、[\%hash]、[\&func]のように冒頭にバックスラッシュ(日本語キーボード・端末では半角円マーク¥)を付加するとリファレンス(アドレス・メモリ上の格納位置・C言語でいうところのポインタ)を渡すことができます。

 サブルーチンコール時に実体を受け取る場合には、それぞれの変数で、リファレンスを受け取る際にはスカラー変数で受け取り、リファレンスが格納されたスカラー変数をリファレンス変数と呼びます。

 また、この例のように期待する戻り値がある場合には、可読性などを犠牲にして意図的に省略する場合は別ですが、Perlでは戻り値を受け取る場合にreturnを省略すると最後に処理された結果が返りますから、特別な意図がない場合には(仮に戻り値を受け取らない場合でも)サブルーチン内で明示的にreturn文を使うのが賢明です。

 return $foo; 

 尚、戻り値をセットせずにreturn文を書くこともできますが、

 return; 

この場合、returnの引数はundef(未定義)値と評価されることになり、Perlでは未定義は偽なので偽が返るという点に注意が必要です。

ホーム前へ次へ