ちょっと使おうPerl言語

更新日 2007/12/29

[HOME] / [Java] / [Oracle8] / [Palm(GCC)] / [Palm(CodeWarrior)] / [EJB] / [本の紹介]


  1. はじめに
  このホームページは、Perlという言語をあまり深入りせずに、ちょっとだけ使おうという企画です。最近はPerlというとCGIというイメージが強いですが、Perlは決してホームページのための言語ではありません。CGIというのは、HTTPサーバソフトと外付けプログラムとのインタフェースのことで、これを用いることでインタラクティブなページが実現可能です。CGIはテキストの入出力で定義されるため、別にperlでなくても、C言語でもシェルスクリプトでも、Fortranだっていいということらしいです。
  ではなぜ、Perlが使われるのでしょうか。それはPerlがテキストの処理がとても得意だからだと思います。このページでは、CGIへの応用についても扱いますが、それ以外にも基本的な機能を説明していきたいと思います。
 
  2. 準備(インストール)
  Perlを使う目的は、CGIやテキストを扱った自動処理などを行うのが一般的ですが、私自身がUNIXで使うことが多かったため、ここではUNIX上で動作させることを中心に書いていく予定です。
  1. 何はともあれ、ダウンロードしてきましょう。最新(perl5.005_03)のソースが こちら にあります。2.5MBです。
    日本語に対応するためにパッチをあてておきます。上記のperlに対応するものが こちら にあります。23KBです。
    日本語文字コードの変換のためのツール(jcode.pl)も準備しておきましょう。 ここに あります。
     
  2. 適当なディレクトリに展開します。
    cd /usr/src
    mkdir perl5
    gzip -dc perl5src | tar xvf -
     
  3. 日本語化(jperl) のためのパッチをあてます
     
  4. Makefileを自動作成し、makeをかけて実行ファイルを作成します
  Linuxなどのおかげで、自宅でUNIX環境を利用できるようになりましたが、それでも普通はWindowsですね。このWindowsでPerlを実習することはできないかというとそうではありません。ここでは、WIndows用のPerlである ActivePerl の取得およびインストール方法についても記述しておきます。
  1. Windows用のperlは実行型で、 こちら にあります。8MBあります。
  2. これをダブルクリックして、インストーラを起動します。OK、OKで進めばいいはずですが、一応、 インストール時の画面イメージ を示します。コマンドプロンプトを立ち上げて、perl -v と打つとバージョンが表示されます。
  これで、準備は終わりです。
 
  3. とりあえず実行
  このホームページはとりあえず動かすことを第一にしていますので、まずは簡単な例で動作確認してみましょう。これがちゃんと動けば、環境上の問題はなくなったことになります。
 
  1. まずは、UNIX環境で、書いてみましょう。

    $ vi hello.pl #!/usr/local/bin/perl     <-- これは、UNIXシェルに、このファイルがこのコマンド(perl)で実行されることを教えるためのものです。

print "Hello world\n";

$ chmod 755 hello.pl
$ hello.pl
Hello

どうでしょう、動いたでしょうか?


  1. お次は、Widowsです。notepad などで、ファイルを作成します。
    UNIXのときの、最初のおまじないは要りません。

    # Hello world を表示します    <-- これはUNIXのおまじないではなくて、コメントです。Perlでは # が先頭についた行は無視されます
    print "Hello world\n";

    コマンドプロンプトを立ち上げ、perl  hello.txt とでもするとUNIX同様に Hello world の文字が表示されます。
    拡張子を .pl にすると、hello.pl だけで実行されます。
  4. 基本はファイル入出力
  Perlの特長は、ファイル入出力とパターン認識・置換が簡単に実現できることだと思っています。ここでは、まずファイルの入出力のサンプルプログラムを使って、どれぐらい簡単なのかを紹介したいと思います。

   $ vi file.pl

      #!/usr/local/bin/perl      <-- UNIXのおまじないです。Windowsでは必要ありません。

      open( FILE, "input.txt" ) || die "ファイル(input.txt)が開けません";  <-- FILEは、ファイルの行を指し示すポインタのようなものです。
      while (<FILE>) {      <-- 行がなくなるまで、FILEが指し示す1行を取り出し続けます。
        print;                 <-- 取り出した行を表示します。perlでは、直前に扱っている文字列変数の指定を省略することができます。
      }               <-- つまり、このプログラムは、ファイルを開いて、全行を表示するというものです

   $ cat input.txt     <-- ファイルの中身はこんな感じ。

      abc
      12345

   $ chmod file.pl
   $ file.pl     <-- 実行すると、ファイルの中身が表示されます。
   abc
   12345
   $
 
 
  5. CSV形式のテキストの加工
 Perlは、テキストの加工にとても便利なのですが、どう便利なのか、実例で示していきましょう。
Excelなどで、データを出力する際に、カンマ区切りのテキストファイルとして出力することができます。これをCSV形式などといいますが、このようなファイルを加工することを考えて見ます。

  open( FILE, "input.txt" ) || die "ファイル(input.txt)が開けません";    <-- ファイルを開きます。 
  while (<FILE>) {     <-- 1行づつ取り込みます。 
       chop;                   <-- 最後の文字(改行)を削除します。 
    @item = split /,/;  <-- 取り込んだ1行について、,(カンマ)を区切り文字として分割し、$item[0], $item[1]という配列それぞれ代入します。

    printf("%s,%s\n",  $item[1], $item[0]);  <-- 代入された文字列を、$item[1] $item[0] の順に表示することになりますから、要するに1つめと2つめのデータを交換するプログラムということになります。
  }
 
 
  6. パターン認識と置換
準備中です。
 
  7. CGIへの応用

準備中です。


  8. 各種例題

例題1 カレントディレクト内のファイル名でループ 拡張子がcsvのファイルを対象に処理するときなど。
opendir DIR, '.';
@files = readdir DIR;
closedir DIR;

foreach $f ( @files ) {
 if ( $f =~ /\.csv$/) {
 }
}

例題2 日本語(全角)も含めて、文字列の取り出しを行う sjisのファイルをUTF-8で読み込み、sjisで出力。
一旦、UTF-8で取り込んだ後は、substrなどを使っても、全角、半角にかかわらず、文字数が指定できる。
open (IN, '<:encoding(shiftjis)', "input.txt");
open (OUT, '>:encoding(shiftjis)', "outoput.txt");
binmode (OUT, ':utf8'); # utf8フラグへの対応らしい

while (<IN>) {
 pirnt OUT substr($_, 0, 4);
}


 
  8. SQL言語を使ったデータベース操作 
  sqlplusというツールをご存知でしょうか。Oracleデータベースをインタラクティブに扱うためのツールでSQL言語を使って操作するものです。このツールをperlプログラムの中から実行することで、データベースへの登録、変更、検索を実現することを考えてみます。
 
  9. TCP/IP通信にも挑戦
  挑戦というほどのことはありません。成り行きで最後になっているだけで、簡単という意味では基本編で扱ってもいい内容です。ただ、一般には通信プログラムを作る機会は少ないと思われますので、とっつきは悪いかもしれません。できれば2台のコンピュータを使って、データのやり取りを行うのが分かりやすいのですが、1台であっても2つのウインドウ間で実行することもできますから、問題はありません。最近は、デスクトップとノートの2台という方も珍しくはないでしょうから2台をLANでつないで、というのも面白いと思います。
 
  10. 参考文献
  Perlに限らず役に立つと思われる書籍を紹介しています。本文からも参照できるようにしていきますが、一覧は こちら でまとめています。
[HOME] / [Java] / [Oracle8] / [Palm(GCC)] / [Palm(CodeWarrior)] / [EJB] / [本の紹介]

このページにご意見のある方は、egami@ee.e-mansion.com までお願い致します。