Perlの星2

Perlの星
~第2話: コードの再利用~
図書館職員のための
アプリケーション開発講習会
コードの再利用


定型処理をサブルーチン(関数)にまとめる
モジュール化する
いずれも基本的な発想は同じです。
ここでは簡単なサブルーチンに
まとめる方法について紹介します。
サブルーチンとは


定型処理をまとめたもの
プログラム中で複数回呼び出す処理をまとめておくと便利!
 プログラム中で似たようなプログラムを書かなくて(コピー&ペーストしなく




プログラム中で一回のみ呼び出す処理にも有効



て)もよくなる
サブルーチンをバグ対策すると、関係箇所がすべて対策される → 管理が
楽になる
プログラムが短くなる → 読むのが楽になる
プログラムの構造を把握しやすくなる
プログラムの構造を把握しやすくなる
同じインターフェイスをもつサブルーチンを切り替えて使える
複数のプログラムで使う場合にも便利(ライブラリやモジュール)
変換テーブルを参照するテキスト加工の
基本的な例(簡略誌名変換、ISBNによる重複チェックなど)
# ステップ1 変換テーブル読み込み
open (HENKAN, “HenkanTable.txt”) or die;
while my $line1 (<HENKAN>) {
@field_henkan = split(“\t, $line1”);
$table{filed_henkan[1]} = $fiels_henkan[3];
}
# ステップ2 データ変換
open (INPUT, “input.txt”) or die;
while my $line2 (<INPUT>) {
chomp $line2;
@field_input = split(“\t, $line2”);
print $line, “\t”, $talbe{$filed_input[2]};
}
ハッシュ %table を
仲介にして変換
サブルーチンにまとめる
$Result = &test{$Data1, $Data2); #サブルーチン name 呼び出し
print $Result; # 結果を print
# サブルーチン test
sub test {
my ($data1, $data2) = @_;
# なんらかの処理
return $result; # return文で結果を返す
}
同色の部分は同一のデータが入る。
赤字の部分はサブルーチンの定型。
同一のインターフェイスの
サブルーチンを用意すると
メインの処理
標準化した呼び出し仕様
標準化した結果形式仕様
A
サブルーチンAの処理
B サブルーチンBの処理
サブルーチンAと同種の機能をもつ
サブルーチンBに処理を切り替えても
そのままメインの処理が動く!
具体的な手法(サブルーチン切り替え)
# mainの処理
$mode = 1; # 手で修正などなど
$result = &test-1($data) if $mode == 1;
$result = &test-2($data) if $mode == 2;
print $result;
# サブルーチン test-1
sub test-1 {
#略
}
# サブルーチン test-2
sub test-2 {
#略
}
サブルーチンの入出
力仕様の統一がミソ
以下、必要に応
じて追加する
ライブラリ形式(複数プログラムで使
用可能)にすると
B
A
プログラムB
固有の部分を記述
プログラムA
固有の部分を記述
必要に応じて、共通部分を
呼び出し
具体的な手法(ライブラリ)
myscript_A.pl
require “mylibrary.pl”;
#略
$result = &MyLib::format($data);
print $result;
pakage MyLib;
mylibrary.pl sub format {
#略
}
1;
ライブラリ (上記の例では mylibrary.pl )を別ファイルにできる
より高度な話


モジュールを使うと、オブジェクト指向的な処
理ができます。
その場合でも基本的な考えは、今回の処理例
と同じです