サブルーチンとは
まずはサブルーチンがどのような場合に利用されるのかを確認しておきます。
下記は配列に含まれる要素を全て出力した後で、「reverse」関数を使って要素を逆順に並び替えて改めて画面に出力しています。
my @city = ("東京", "大阪", "名古屋"); print "配列の要素を出力します¥n"; foreach my $var(@city){ print "$var¥n"; } my @rcity = reverse(@city); print "配列の要素を出力します¥n"; foreach my $var(@rcity){ print "$var¥n"; }
配列の中身を確認する部分で同じような処理を記述しています。今回のように2箇所であればそのまま記述しても構いませんが、プログラム中で何回も使用するような場合にはプログラムが冗長になり可読性も悪くなっていきます。
そこで同じような一連の処理を何度も行う場合には、その部分をサブルーチンとして独立し、必要に応じて呼び出すことができます。詳しいサブルーチンの使用方法は次のページ以降で解説しますけれどサブルーチンを使って先ほどのサンプルを書き直すと次のように記述できます。
my @city = ("東京", "大阪", "名古屋"); &dispArrayValue(@city); # サブルーチン呼び出し my @rcity = reverse(@city); &dispArrayValue(@rcity); # サブルーチン呼び出し # ここから下がサブルーチンです sub dispArrayValue{ my @array = @_; print "配列の要素を出力します¥n"; foreach my $var(@array){ print "$var¥n"; } }
配列の要素を出力する部分をサブルーチン名「dispArrayValue」と言う名前でサブルーチンとして記述し、必要に応じて呼び出しています。最初のサンプルよりもむしろ長くなった気がしますが、さらに配列の中身を確認する必要ができた場合でもサブルーチンを呼び出す1行だけを追加するだけで済みます。
my @city = ("東京", "大阪", "名古屋"); &dispArrayValue(@city); my @rcity = reverse(@city); &dispArrayValue(@rcity); my @rrcity = reverse(@rcity); &dispArrayValue(@rrcity); sub dispArrayValue{ my @array = @_; print "配列の要素を出力します¥n"; foreach my $var(@array){ print "$var¥n"; } }
このようにサブルーチンは同じような一覧の処理をまとめるために使用します。詳しくは次のページ以降で解説していきます。
サンプルプログラム
では簡単なプログラムで確認して見ます。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my @city = ("東京", "大阪", "名古屋"); &dispArrayValue(@city); my @rcity = reverse(@city); &dispArrayValue(@rcity); sub dispArrayValue{ my @array = @_; print "配列の要素を出力します¥n"; foreach my $var(@array){ print "$var¥n"; } }
上記を「test1-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
( Written by Tatsuo Ikura )