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 | ! |

rindex[編集]

rindex (STR, SUBSTR, [POSITION])

indexと同じですが、末尾からの位置を返します。

substr[編集]

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

文字列 EXPR から、OFFSET 目以降のバイト列を返します。取り出す長さ LENGTH をバイト単位で指定できますが、省略した場合は文字列の最後まで取り出します。なお、utf8プラグマが有効な場合は、バイト単位ではなく文字単位で取り出すことができます。

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

文字列 REPLACEMENT を指定すると、取り出される部分を REPLACEMENT で置換します。

$str = "Hello, world!";
substr($str, 7, 5, "Japan"); # $str は "Hello, Japan!" になる

uc[編集]

uc ([EXPR])

文字列 EXPR を大文字にして返します。EXPR を省略すると、$_ が使われます。

ucfirst[編集]

ucfirst ([EXPR])

uc と同じですが、先頭1文字を大文字にして返します。

lc[編集]

lc ([EXPR])

uc と同じですが、小文字にして返します。

lcfirst[編集]

lcfirst ([EXPR])

ucfirst と同じですが、小文字にして返します。

chomp[編集]

chomp VARIABLE
chomp (LIST)

変数 VARIABLE の末尾の $/(デフォルトは "\n")を削除します。変数のリストを渡された場合は、各変数について同じ処理を行います。VARIABLE を省略すると $_ が使われます。

chop[編集]

chop VARIABLE
chop (LIST)

chomp と同じですが、末尾1文字を無条件に削除します。

chr[編集]

chr [NUMBER]

文字セットで NUMBER 番目に割り当てられている文字を返します。NUMBER を省略すると $_ が使われます。逆の操作を行うには ord を使います。

crypt[編集]

crypt PLAINTEXT, SALT

C ライブラリの crypt(3) をエミュレートします。

hex[編集]

hex [EXPR]

十六進数 EXPR を十進数に変換して返します。EXPR を省略すると $_ が使われます。

length[編集]

length [EXPR]

文字列 EXPR の長さを返します。bytes プラグマが有効な場合(デフォルト)はバイト数を、utf8 プラグマが有効な場合は文字数を返します。EXPR を省略すると $_ が使われます。

oct[編集]

oct [EXPR]

八進数 EXPR を十進数に変換して返します。EXPR を省略すると $_ が使われます。

ord[編集]

ord [EXPR]

文字列 EXPR の文字セット上でのコード位置を返します。EXPR を省略すると $_ が使われます。逆の操作を行うには chr を使います。

pack[編集]

pack TEMPLATE, LIST

LIST を TEMPLATE に従ってバイナリデータに変換します。

q[編集]

q/STRING/
qq/STRING/
qr/STRING/
qx/STRING/
qw/STRING/

シングルクォート、ダブルクォート、正規表現、バッククォート、単語クォート。詳細は演算子の章を参照。

reverse[編集]

reverse LIST

リストコンテキストでは LIST の順番を逆順にしたリストを返します。スカラコンテキストでは LIST の順番を逆順にし、各要素の文字列を反転したリストを返します。

my @array = qw( ABC DEF GHI );
print reverse @array; # GHIDEFABC
print scalar reverse @array; #IHGFEDCBA

sprintf[編集]

sprintf FORMAT, LIST

LIST を FORMAT に従って整形して返します。

tr[編集]

tr///

1文字を対応する1文字に置換します。詳細は演算子の章を参照。

y[編集]

y///

tr///と同義。

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

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

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

print &square(5);
print square(5);
実行結果
25
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 をユーザ定義関数を呼び出した式に戻します。Perlのサブルーチンでは、returnが無い場合は最後に評価された値が戻り値となるので、この場合returnは省略可能です。ただし、可読性を上げるため明示的に書かれることもあります。
} ユーザ定義関数の宣言のブロックが終ったことを示します。
print &square(5);
print square(5);
両者は同じ意味で、square 関数を呼び出します。&を明示的につけることにより、呼び出す関数をユーザ定義関数に限定します。下のほうは、ユーザ定義関数を呼び出す前に宣言してあることで使用できます。&square(5)とすることで、square 関数に 5 を渡し(引数)、実行結果が戻ってきます(戻り値)。戻り値は print 関数に渡され、 25 を表示するのです。

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

コード
sub square { $_[0] ** 2 }

print square(5);
実行結果
25

文法[編集]

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

wantarrayを使うと、サブルーチンが呼び出したコンテキストがリストコンテキストであるかどうかを調べることができます。

sub func {
    my @list = @_;
    my $scalar = $_[0];

    if (wantarray) {
        return @list;
    }

    else {
        return $scalar;
    }
}

@a = func(0, 1, 2); # (0, 1, 2)
$b = func(0, 1, 2); # 0

上記のように、リストコンテキストとスカラコンテキストで返り値を変更させたい場合に用いられます。

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