ちょっと使おうPerl言語
更新日 2007/12/29
[HOME]
/ [Java]
/ [Oracle8]
/ [Palm(GCC)]
/ [Palm(CodeWarrior)]
/ [EJB]
/ [本の紹介]
このホームページは、Perlという言語をあまり深入りせずに、ちょっとだけ使おうという企画です。最近はPerlというとCGIというイメージが強いですが、Perlは決してホームページのための言語ではありません。CGIというのは、HTTPサーバソフトと外付けプログラムとのインタフェースのことで、これを用いることでインタラクティブなページが実現可能です。CGIはテキストの入出力で定義されるため、別にperlでなくても、C言語でもシェルスクリプトでも、Fortranだっていいということらしいです。
ではなぜ、Perlが使われるのでしょうか。それはPerlがテキストの処理がとても得意だからだと思います。このページでは、CGIへの応用についても扱いますが、それ以外にも基本的な機能を説明していきたいと思います。
Perlを使う目的は、CGIやテキストを扱った自動処理などを行うのが一般的ですが、私自身がUNIXで使うことが多かったため、ここではUNIX上で動作させることを中心に書いていく予定です。
- 何はともあれ、ダウンロードしてきましょう。最新(perl5.005_03)のソースが
こちら
にあります。2.5MBです。
日本語に対応するためにパッチをあてておきます。上記のperlに対応するものが
こちら
にあります。23KBです。
日本語文字コードの変換のためのツール(jcode.pl)も準備しておきましょう。
ここに
あります。
- 適当なディレクトリに展開します。
cd /usr/src
mkdir perl5
gzip -dc perl5src | tar xvf -
- 日本語化(jperl) のためのパッチをあてます
- Makefileを自動作成し、makeをかけて実行ファイルを作成します
Linuxなどのおかげで、自宅でUNIX環境を利用できるようになりましたが、それでも普通はWindowsですね。このWindowsでPerlを実習することはできないかというとそうではありません。ここでは、WIndows用のPerlである
ActivePerl の取得およびインストール方法についても記述しておきます。
- Windows用のperlは実行型で、
こちら
にあります。8MBあります。
- これをダブルクリックして、インストーラを起動します。OK、OKで進めばいいはずですが、一応、
インストール時の画面イメージ
を示します。コマンドプロンプトを立ち上げて、perl -v と打つとバージョンが表示されます。
これで、準備は終わりです。
このホームページはとりあえず動かすことを第一にしていますので、まずは簡単な例で動作確認してみましょう。これがちゃんと動けば、環境上の問題はなくなったことになります。
- まずは、UNIX環境で、書いてみましょう。
$ vi hello.pl #!/usr/local/bin/perl <-- これは、UNIXシェルに、このファイルがこのコマンド(perl)で実行されることを教えるためのものです。
print "Hello world\n";
$ chmod 755 hello.pl
$ hello.pl
Hello
どうでしょう、動いたでしょうか?
- お次は、Widowsです。notepad などで、ファイルを作成します。
UNIXのときの、最初のおまじないは要りません。
# Hello world を表示します <-- これはUNIXのおまじないではなくて、コメントです。Perlでは
# が先頭についた行は無視されます。
print "Hello world\n";
コマンドプロンプトを立ち上げ、perl hello.txt とでもするとUNIX同様に Hello world の文字が表示されます。
拡張子を .pl にすると、hello.pl だけで実行されます。
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
$
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つめのデータを交換するプログラムということになります。
}
準備中です。
準備中です。
例題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);
}
sqlplusというツールをご存知でしょうか。Oracleデータベースをインタラクティブに扱うためのツールでSQL言語を使って操作するものです。このツールをperlプログラムの中から実行することで、データベースへの登録、変更、検索を実現することを考えてみます。
挑戦というほどのことはありません。成り行きで最後になっているだけで、簡単という意味では基本編で扱ってもいい内容です。ただ、一般には通信プログラムを作る機会は少ないと思われますので、とっつきは悪いかもしれません。できれば2台のコンピュータを使って、データのやり取りを行うのが分かりやすいのですが、1台であっても2つのウインドウ間で実行することもできますから、問題はありません。最近は、デスクトップとノートの2台という方も珍しくはないでしょうから2台をLANでつないで、というのも面白いと思います。
Perlに限らず役に立つと思われる書籍を紹介しています。本文からも参照できるようにしていきますが、一覧は
こちら
でまとめています。
[HOME]
/ [Java]
/ [Oracle8]
/ [Palm(GCC)]
/ [Palm(CodeWarrior)]
/ [EJB]
/ [本の紹介]
このページにご意見のある方は、egami@ee.e-mansion.com
までお願い致します。