『Cプログラミング診断室』目次/おわり

第14章 メモリが足りない

Cの次は


さて、終わりにあたって、次のステップに飛躍したい人に参考になりそうなことを紹介しておき たいと思います。

実は、この診断してきたこの私は、C言語でなければならない場合にはC言語を使っていますが、 他の言語の方が適している場合には他の言語を使っています。「C言語は万能言語」という宣伝、 デマが流れていますが、決してそのようなことはありません。C言語も、1つのプログラム言語に 過ぎません。BASICやFORTRAN、COBOLなどと本質的には何も変わりません。強いて言えば、他の言 語に較べて、コンピュータ自体についてのより深い認識が必要なことでしょうか。少なくとも、メ モリについての明確な理解だけは絶対必要です。これが理解できない限りポインタは理解できませ ん。永久に「C言語入門クラス」ということになります。

さて、C言語はだいたい使えるようになった人に、次にやるべき言語の紹介をしましょう。もし、 他に使いたい言語がある人は、それをやってください。いや、そういう人にも是非勧めたい言語が あります。それは、perl(パール)という言語です。

この言語は、個人の環境とか、特定の開発をサポートするような「ツール」をちょこちょこ作る には、現状では最適の言語だと私は思っています。C言語をマスターされた方なら、perlをマスター するのはさほど困難はないでしょう。いろいろな雑誌に連載などもされています。しかし、ちゃん としたまとまった情報、成書は参考文献に挙げた「Programming perl」しかないようです。

perlの特徴は、

  1. 文字列処理が極めて強力
  2. 連想配列(associative array)
  3. サイズを気にしなくてよい
  4. コンパイル不要
でしょうか。

C言語は文字列処理が可能ですが、perlに較べたら全く貧弱です。テキスト形式のデータファイ ルを加工するような場合、必要なフィールドを切り出すなんてたった1命令でできてしまうので、 とっても便利です。

連想配列というのは、ちょっと慣れないと分かりづらいかもしれません。ふつうの配列は、添字 に整数値を使います。もちろん、perlでもそういうふつうの配列(perlの世界では「リスト」とい う)も使えます。連想配列は、英数字の前に%をつけます。連想配列の要素を指定するには、[ ]で はなく、{ } を使います。そして、一番の特徴は、配列の添字に「文字列」を使うことです。

たとえば、

   $sakusha{ 'ぼっちゃん' } = '夏目漱石';
   $sakusha{ '伊豆の踊子' } = '川端康成';
   $sakusha{ '潮騒'       } = '三島由紀夫';
というふうに、連想配列%sakushaにデータを入れておき、変数$sakuhinに文字列 'ぼっちゃん'が 入っていると、
    $dare = $sakusya{$sakuhin};
で、変数$dareに作者'夏目漱石'が代入されます。添字に文字列が使えることは、実に便利です。 この便利さを伝えるには、相当のページ数を割く必要がありますが、これに慣れたら、C言語には どうして連想配列がないんだと思ってしまうでしょう。それほど重宝なものです。

それから、配列のサイズを全然気にしなくて良いことです。文字列の長さも同様、全然気にしな くていいのです。一見サイズを気にしなくてもよいように見えるBASICとは違い、本当に気にしな くてよいのです。私は、連想配列に10万個以上のデータをぶち込んでから処理したりしていますが、 全く平気です。

それから一番重要なことが、コンパイル不要ということです。テキストファイル(スクリプトファ イル)だけしか必要ありません。テキストファイルの先頭行に、perlのプログラムとして実行して もらうために、

#!/usr/local/bin/perl
と書き、その後にしっかりコメントを書いてから、perlのプログラムを書き、そのファイルのモー ドを実行可能にしておけば、新しいコマンドとして使えてしまうのです。ドキュメントファイルを 別に用意しなくて済むので助かります。

C言語でツールを作ると、コンパイルして実行モジュールを別に作らなければならないし、実行 モジュールは結構なサイズになります。とにかく1つのファイルでは済まないので、管理に手間が かかります。だから、私のような面倒くさがり屋にはperlの方が向いているのです。

perlという言語は、それなりに使っても十分役立ちます。"Programming perl"の後半のプログラ ミング例は長いものが多いのですが、もっと短いので十分役立ちます。

リスト14−3が、診断室の原稿を編集部に渡すときに使っているperlのプログラム(スクリプ ト)の1つです。

リスト14−3 UNIXファイル形式の行末をMS-DOSファイル形式に変更する

     1	#!/usr/local/bin/perl
     2	#
     3	#  addcr
     4	#       UNIXの行末形式を、MS-DOSの行末形式に変換する。
     5	#
     6	while(<>) {
     7	        s/\n/\r\n/;
     8	        print;
     9	}

先頭のコメント部分を除いた実行部分は、たった、

        while(<>) {
                s/\n/\r\n/;
                print;
        }
で、標準入力から1行単位で読み込みながらループを回ります。s/\n/\r\n/;で、UNIXの行末形式 をMS_DOS形式に変換しています。 print; で変換された1行分の文字列を標準出力に出します。

とても短いプログラムですが、便利に使っています。こういう感じのperlプログラムがゴロゴロ していて、それらをMakefileの中で組み合わせて使っています。単純な道具を組み合わせて仕事を することこそ価値があるのです。また、単純な道具であるからこそ組み合わせが可能なのです。

■参考文献■

[14-1] "Programming perl", Larry Wall and Randal L. Schwartz, O'Reilly & Associates. 邦訳『Perlプログラミング』近藤嘉雪


最後まで無料で閲覧できましたが、著者に恩義を 感じ、本書を閲覧してお気に召しましたら、他の者にも本ページの存在を知ら せる義務がございます。いいですね。忘れちゃいけ ませんよ。たいした手間ではないでしょう? (^_^)


Copyright1996 Hirofumi Fujiwara. No reproduction or republication without written permission
『Cプログラミング診断室』目次/おわり