図書館職員のための アプリケーション開発講習会 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の処理 サブルーチンBの処理 B A サブルーチン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 固有の部分を記述 B プログラムA 固有の部分を記述 A 必要に応じて、共通部分を 呼び出し
ライブラリ (上記の例では mylibrary.pl )を別ファイルにできる 具体的な手法(ライブラリ) myscript_A.pl require “mylibrary.pl”; # 略 $result = &MyLib::format($data); print $result; pakage MyLib; sub format { # 略 } 1; mylibrary.pl ライブラリ (上記の例では mylibrary.pl )を別ファイルにできる
より高度な話 モジュールを使うと、オブジェクト指向的な処理ができます。 その場合でも基本的な考えは、今回の処理例と同じです