Perlによるファイル入出力サブルーチン

Perlって変数の使い方がこんなに柔軟だったの!?



<CGIの汎用型サブルーチンをまとめたい>

CGIでこれからしてみたいことがいくつか有るのですが、実は未だ自分のプログラミングスタイルが確立しておらず、何かしようとするたびに以前に作ったソースのプリントアウトを引っ張り出してきて、読み直して機能の追加や削除という作業をしております。

そういうやり方を重ねて行くこともプログラミングの勉強には役に立つとは思うのですが、例えば変数名がちょっと変わるだけであちこちを直さなければならないような方式ではいかにも生産性が低いので、自分で良く使いそうな手法は、汎用性の高い形のサブルーチンを作って行きたいと考え始めました(遅いなぁ、もう!CGI使えるサーバーに越してきて一年になるのにぃ…笑)。

<ファイル入出力のサブルーチン>

で、今回はファイルの入出力についてのサブルーチンを作ってみました。
sub fileinputsub fileoutの2つです。

sub fileinputに関しては、入力ファイル名と、変数名を指定してやると、テキストファイルのデータを行毎に変数名で指定した配列に読み込みます。

sub fileoutに関しては、出力ファイル名と、変数名、書き込みモード(上書きか、追加書き込みか)、書き込み開始データの配列の番号、書き込み終了データの配列の番号を指定してファイル出力するものです。

両方とも、ファイルオープンエラーかどうかを0,1のデータで返します。

ソースを見る

<Perlの変数のやり取りって独特だと思いました>

驚いたのは『Perlでは変数名を変数で指定できる』ということです。
@$hensuumeiなどの書き方を受け付けてもらえたのです。これは、何をやっているのかと言うと、サブルーチンを呼ぶ側で、引数”data”を付けて呼んでいるので、
$hensuumei=$_[1]によって、$hensuumeiという変数には”data”という文字列が入ります。
その後で、@$hensuumeiとやると、それはつまりこのプログラム上に、@dataと書くのと同じ意味になるんです。
こうやって書くと当たり前に見えますが、変数名の部分に変数を当てられる言語って始めて見たので、私はちょっと驚きました(笑)。もちろん、その後に出てくる$$hensuumei[$i]も、実行時には$data[$i]と書いたのと同様の役割を果たします。

Perlのサブルーチンの引数って、使い方によってはBasicよりも便利なのではないかと思います!!

2002.12.06

[HOME][とまて週報TOP]