p.78 の例のように "sub" キーワードの次に名前を書き, サブルーチンを定義できる.サブルーチン定義はグローバルである.
Perl では変数はデフォルトでグローバル変数である. サブルーチン内で全てのグローバル変数にアクセスできる. p.78 の例はグローバル変数を読み書きし, 戻り値を使わないサブルーチンである. 多数のサブルーチンからグローバル変数を利用できることは 便利な点も多いがデバッグを困難にする場合もあるので注意すること. プライベートな変数の作り方は後述する.
Perl ではメインルーチンを囲むブロックに名前がない.
サブルーチン名の前に & をつけて呼び出す. & は省略できる場合が多いが,組込み関数と名前が ぶつかったときのために書いておくほうがよい.
最後に計算された式の値が戻り値となる. 場所的にサブルーチンの最後にある式ではないことに注意.
他の言語と同様に return 文で明示的に値を返すこともできる.
サブルーチンを呼び出した側ではその値を使わなくてもよい.
$n = &max(10, 15);
上の形でサブルーチンを呼び出すことで,第 1 引数として 10, 第 2 引数として 15 が与えられる.これらは max サブルーチン内では $_[0], $_[1] としてアクセスできる.すなわち,サブルーチン内では 引数リストは配列 @_ に代入されている.
p.82 上のサブルーチン max とそれを使うメインルーチンを書き, 動作させてみよ.
my を使ってサブルーチン内にローカルなプライベート変数を作ることができる. プライベート変数はアクセス範囲が制限されるため,デバッグに有利である.
サブルーチン冒頭で my を使ったプライベート変数に引数をコピーするという 書き方がよく用いられる.引数のあるサブルーチンではいつも最初に
my($a,$b) = @_;
のように書き,わかりやすい変数名をつけるとよい.
p. 83 上の例のパラメータに名前をつける部分を p. 84 下の例に従い 一行にしたバージョンを作成し,それを使うメインルーチンも書け. 動作を確認せよ.
my は for ループの中などのサブルーチンよりも 小さい単位にも使うことができる.
Perl はいろいろな便利な自動変換ある半面,間違いをみつけにくい. プログラムの最初に use strict; と書くことでエラーが多く出力 されるようになる.プログラムの制限が厳しくなるため書きにくい面も あるが,よいプログラムを書く習慣がつくので毎回 use strict; を使うようにすべきである.
4.12 練習問題を解け. 解答プログラムを添付メールとして提出せよ. メールの宛先は <hiroshi@tokai.ac.jp> とし, Subject (件名)を report perl 4 とせよ.