Perl/関数

出典: フリー教科書『ウィキブックス(Wikibooks)』

プログラミング > Perl > 関数

目次

[編集] 組み込み関数

[編集] index 関数

index (STR, SUBSTR, [POSITION])

文字列 STR の中から、検索文字 SUBSTR を探し、その位置を返します。検索文字が見つからない場合には、返り値はゼロ以下の値 (通常は -1) となります。省略可能引数、POSITION には、検索開始位置を指定します。

位置情報が 0 から始まることに留意しましょう。 0 は文字列の左端を表します。厳密には文字数ではなくバイト数の指定なのでマルチバイト文字の取り扱いには注意を要します。

       0   1   2   3   4   5   6   7   8   9  10  11
     | H | e | l | l | o |   | W | o | r | l | d | ! |

[編集] substr 関数

substr (EXPR, OFFSET, [LENGTH], [REPLACEMENT])

文字列 EXPR から、OFFSET 目以降のバイト列を返します。取り出す長さ LENGTH をバイト単位で指定できますが、省略した場合は文字列の最後まで取り出します。

位置情報 OFFSET は上述のとおり 0 から始まりますが、LENGTH は容量なので通常は 1 以上の値を指定します。

[編集] ユーザ定義関数(サブルーチン)

予めPerlに準備されている関数の他に、プログラマが新しい関数を準備して利用することもできます。

コード
sub square {
  my $arg = $_[0];
  my $return = $arg * $arg;
  return $return;
}

print &square(5);
print square(5);
実行結果
25
コード詳解
sub square { ユーザ定義関数 square を宣言します。
my $arg = $_[0]; ユーザ定義関数への引数が収納された配列 @_ の一番最初のスカラーを $arg に代入します。このスカラー変数 $arg は、my 関数によりユーザ定義変数 square の内部でのみ使われます(レキシカルスコープを持つ)。$arg = shift; と書いても、 @_ の一番最初のスカラーが代入されます。
my $return = $arg * $arg; my 関数によりレキシカルスコープを持ったスカラー変数 $return に、 $arg$arg を掛けた数を代入します。即ち、= の右の式の結果が、$return に代入されたということです。
return $return; スカラー変数 $return をユーザ定義関数を呼び出した式に戻します。
} ユーザ定義関数の宣言のブロックが終ったことを示します。
print &square(5);
print square(5);
両者は同じ意味で、square 関数を呼び出します。&を明示的につけることにより、呼び出す関数をユーザ定義関数に限定します。下のほうは、ユーザ定義関数を呼び出す前に宣言してあることで使用できます。&square(5)とすることで、square 関数に 5 を渡し(引数)、実行結果が戻ってきます(戻り値)。戻り値は print 関数に渡され、 25 を表示するのです。

動作をわかりやすくしてみれば上のようになりますが、下のように書いても結果は同じです。一般に熟練したPerlのプログラマはある程度簡略化された記述を簡潔で直感的であるとして好むようです。

コード
sub square {
  my $arg = shift;
  return $arg ** 2;
}

print &square(5);
実行結果
25

[編集] 文法

[編集] 引数・返り値とコンテキスト

このページ「Perl/関数」は、書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にノートへどうぞ。
ヘルプ