ためになるホームページ お問い合わせ




TOP > Perl > サブルーチン
サブルーチン
ユーザ定義関数を作成する事ができる。サブルーチン名は独立した専用の名前空間に入っているので、1つのプログラム上でサブルーチン名とスカラー変数名は独立している。

サブルーチンの定義
sub サブルーチン名 {
    #処理
  }

サブルーチンの起動
(書式)&サブルーチン名;

サブルーチンの戻り値
サブルーチンは全て何かしらの値(戻り値)を返す。但し、全てのサブルーチンが有用な値を返す訳ではない。かえす値は、自動的にサブルーチン内で最後に行われた計算の結果が自動的に戻り値となる。

サブルーチンの戻り値の例
sub func
{
  print "サブルーチンが呼び出されました\n";
  $val = $a + $b;   #この値の結果が戻り値となる。
}

#以下のサブルーチンは$x,$yの値によって返す値が異なる。
sub rev_func
{
  if ($x < $y)
  {
    $x..$y;
  }
  else
  {
    reverse $y..$x;
  }
}
$x = 3;
$y = 9;
@array = &rev_func;


サブルーチンに引数を渡す
サブルーチンは引数を受け取る事ができる。サブルーチンを呼び出す際に、括弧で値を渡す。サブルーチン内で引数の値は、配列変数@_でアクセスできる。
この値は、サブルーチン内のローカル的な値なので、もしグローバルな@_があった時は、サブルーチンを起動する前の@_の値は一時的に保存され、サブルーチン終了後に元に戻る。
また、呼び出す際には、サブルーチン名の右に括弧をつけて、引数をカンマで並べる。

サブルーチンの引数の例
sub rev_func
{
  if ($_[0] < $_[1])
  {
    $_[0]..$_[1];
  }
  else
  {
    reverse $_[1]..$_[0];
  }
}
@array = &rev_func(9, 3);


return演算子
return演算子は、サブルーチンから即座に値を返す。returnを単独で使った場合は、スカラーコンテキストの時はundef、リストコンテキストの時は、空リストが返る。

return演算子の例
my @array = qw / abc def ghi /;
my $pat = "def";
my $result = &search_pat($pat, @array);

sub search_pat
{
  my($pat, @array) = @_;
  foreach (0..$#array)
  {
    if ($pat eq $array[$_])
    {
      return $_;#スカラー
    }
  }
  -1;#見つからなかった場合
}


アンパーサンドの省略
サブルーチンを起動する際、アンパーサンドを省略する事ができるケースがある。そのケースとは、「起動前にサブルーチンを定義する」である。但し、自分で記述したサブルーチン名が組み込み関数と一緒の時はアンパーサンドは省略できない(省略すると、組み込み関数が呼ばれる)。






Copyright 2007 ためになるホームページ All Rights Reserved.