#!/usr/local/bin/perl $_ .= $a while($a=<>) ; # 全ての入力行 $a をまとめて $_ にいれます。 require "p9-hen.pl"; # $_ を p9-hen.pl に書いてある変換規則で変換し print; # 印刷します。
s/ka/か/go ; # ka を か にかえます。 s/ki/き/go ; # ki を き にかえます。 s/(hu|fu)/ふ/go ; # hu か fu であれば ふ に変換します。 s/(zya|ja)/じゃ/go ; # zya か ja であればじゃに変換します。 1; # require で呼ばれた最後の印として必要。
% p9-0.pl < toto で 実行してみて下さい。
サブルーチンからもとってくる場合に変化していても、変化しなくても良い。 重要な点は、サブルーチンのなかで処理する場合に使う一時的な変数が、 親の変数と同じ名前であってはならないことである。同じだと、変数の値が 変化してしまう。これを避ける為に、local な変数の宣言をして、たとえ 同じ変数名であっても、別の変数として扱うことができる。これによってサブルーチンをブラックボックス的に一つのコマンドとして使うことができる。
#!/usr/local/bin/perl $x = 1; $y = 2; # $x, $y を定義、 ($X, $Y) = &a($x,$y); # サブルーチン a を呼ぶ。 print " x,y : $x, $y\n"; # $x, $y を印刷。変化していない。 print " X,Y : $X, $Y\n"; # 結果の$X, $Y を印刷。 print ' @_ :',"@_\n"; # 配列 @_ を印刷。すでになにもない。 @b = &a($y,$x); # 今度は $y $x と順番を変えて a を呼び @b に代入。 print " main : $x, $y\n"; # $x, $y を印刷。変化していない。 print " main : @b\n"; # 結果の配列 @b を印刷。 # print &tan(3.1415/4.0),"\n";# 関数 tan の例 # sub a { # サブルーチン a の始まり。 local($a, $b) = @_;# local な変数 $a $b に変数の値を引き渡す。 local($c, $d); # local な変数 $c $d を宣言する。 $c = $a + $b ; $d = $a - $b ; # 和と差を取る。 print " sub a: $a, $b, $c, $d\n"; # サブルーチン a の local な変数を印刷。 ($c,$d) ; # 結果の 配列の値を返す。 } # サブルーチン a の終了。 # sub tan { local($th) = @_; # local な変数 $th に変数の値を引き渡す sin($th)/cos($th); # sin($th)/cos($th) の値を返す。 }
sub a{...} は別の file にあって、require しても良い。沢山の 便利な サブルーチンの集まりをライブラリーと呼ぶ。ライブラリーの場合には、 require した file の最後に 1; をつけるのを忘れないことが必要である。 1; がないと require が成立したか perl が 判定できないからである。
#!/usr/local/bin/perl -I/usr/local/lib/perl
のように指定できます。
#!/usr/local/bin/perl require("ctime.pl"); # /usr/local/lib/perl/ctime.pl を 呼ぶ。 print &ctime(time) ; # 時刻を表示する。time は、1970/1/1 よりの秒数。
どのようなライブラリーがあるかというと、jcode.pl (日本語のコー ド変換ライブラリ)、 bigint.pl (任意桁の整数演算)、wish.pl (X window の toolkit (Tcl/TK) とつないで Window の操作)、tip.pl (RS232C への入出力インターフェイス)、socket.ph (LAN へのソケット) などあるので、詳しくは参考書などを見て欲しい。 perl の単独のコマンドとして、latex2html、jlatex2html ( LaTeX から html への変換)、a2p (awk から perl への変換)、s2p (sed から perl への変換) texi2html (texinfo から html への変換)、 man2html、plain2 (plain file からLaTeX への変換)、などほとん どの言語間の変換が perl のコマンドとして存在している。これら は、anonymous ftp サイトで検索して見て下さい。