Perlは,現在最も普及しているスクリプト言語の一つです。米国の出版社O'Reilly & Associatesに勤務するLarry Wallという人が作った言語であり,誰でも自由に使えます。ほかのスクリプト言語と同様,Perlには再利用可能なプログラム(モジュールと言います)がたくさんあり,モジュールを組み合わせることで面倒な処理を手早く自動化することができます。特に,文字列処理機能が優れており,正規表現*1と組み合わせると強力な文字列検索/置換プログラムを作れます。

 一般にはPerlは,Webサーバーで動作するCGI*2プログラムを作る言語としてよく知られています。しかし,Perlの使い道はCGIプログラムだけではありません。本特集では,デスクトップで動作する便利なプログラムをいくつか紹介しながら,Perlの使い方を説明していきます。

WindowsでPerlを使うには処理系のインストールから

 まずは,Windows環境向けにPerl実行環境を整備する方法と,モジュールを入手する方法を説明します。PerlはUNIX環境で発達してきたため,各種UNIXやLinuxには標準でPerlの実行環境が入ってます。LinuxやUNIXのユーザーは,テキスト・エディタでプログラムを書いてそのまま実行できます。しかし,Windowsは標準ではPerl実行環境は入っていません。Windows用のPerl処理系がいくつかありますので,それを入手してインストールする必要があります。

図1●ActiveStateのWebサイト。中央付近にActivePerlのダウンロード・サイトへのリンクがある
図2●Windows環境でPerlプログラム中に日本語を記述するときは,エンコードを指定する必要がある。指定しないと(a)のように文字化けする。プラグマで指定すれば(b)のように正しく処理できる
図3●use strictプラグマを指定すると,コードの記述に制限がかかる。例えば未宣言の変数を使うとエラーになる

 今回は,カナダActiveState(http://www.activestate.com/)が無料で提供する「ActivePerl」を利用します。入手は簡単です。ActiveStateのWebページを開き,中央近くにある「LANGUAGES」という項目から「ActivePerl 5.8.7,5.6.1」をクリックしてください(図1[拡大表示])。続いて現れるWebページに「Download」と書いてあるアイコンがありますので,これをクリックします。すると名前やメール・アドレスを入力する画面が出てきますが,必ずしも入力する必要はありません。「NEXT」というアイコンをクリックすると,ダウンロードするパッケージを選ぶ画面が出てきます。ここで,「Windows」の「MSI」を選んでください。ダウンロードが始まります。

 ダウンロードしたパッケージはMSI(Microsoft Installer)形式になっていますので,ダブルクリックするだけでインストールが始まります。インストール環境を選択するダイアログがいろいろ出てきますが,基本的には「Next」ボタンで進めていくだけで済みます。環境変数のPath*3の設定までしてくれるのでとても簡単です。

 インストールが済んだら,コマンドプロンプトを起動して「perl -v」と入力してEnterキーを押してみてください。Perlのバージョン情報を確認できればインストールは成功です。ちなみに,本稿執筆時点でのActivePerlの最新バージョンは「5.8.7 Build 813」です。

 ActivePerlに付属するサンプル・プログラムで,Perlプログラムの実行方法を確認しておきましょう。コマンドプロンプトを開いて,カレント・ディレクトリ(カレント・フォルダ)を「C:\Perl\eg」に変更してください。このディレクトリには「example.pl」というサンプル・プログラムがあります。これを実行してみましょう。Perlプログラムを実行するには「perl」コマンドの後に半角スペースを挟んでファイル名を指定します。つまり,「perl example.pl」と入力してEnterキーを押せばよいのです。「Hello from ActivePerl!」という文章が表示されればOKです。これで準備完了です。

Windowsではエンコーディングに注意

 プログラムを書き始める前に,日本語処理での注意点を説明します。Perlは国際化に対応する機能をバージョン5.8で強化しています。今回利用するActivePerl 5.8.7も標準で日本語を利用できます。ただし,何も考えずに日本語をコード中に記述すると文字化けが発生することがあります。例えば,次のコードを見てください。

$str = "日経ソフトウエア";
print "$str\n";
print length($str), "\n";

これは「日経ソフトウエア」という文字を表示して,表示した文字数を知らせるプログラムです。このまま実行すると図2(a)[拡大表示](a)のように「ソ」の部分が文字化けします。文字数も15文字になっています。

 これは,文字コードを指定していないために起こる問題です。WindowsではシフトJISという文字コードを使いますが,シフトJISでは「ソ」は「835c」というコードに置き換えられます。Perlでは,このうちの「5c」はエスケープ・シーケンス*4を意味する「¥」(バックスラッシュ)になるのです。その結果,次の文字の1バイト目とつながってしまい,表示がおかしくなってしまいます。また,文字数は,日本語(2バイト文字)を考慮せず単なるバイト列として計算するため,15文字とカウントしています(エスケープしたぶん1文字減る計算になります)。

 これを回避するには,ソースコードの先頭で文字コードを指定します。具体的には<

use encoding 'shift-jis';

というコードを先頭に追加します。「use encoding」という命令を使って文字コードをシフトJISに指定します。こうすれば文字化けは発生せず,文字数も正しく数えられます(図2(b)[拡大表示])。

 Windows環境では,文字コードはシフトJISが標準ですので,常にuse encodingを指定するように注意しましょう。UNIXなどでは,EUC-JPを使えば特殊文字にぶつからないので,文字化けは起きません。ただし,単なるバイト列として扱われてしまうので,文字数を数える場面などでは困ることになります。正しく日本語を扱いたいときはuse encodingを使うように心がけましょう。

 なお,use encodingで使用した「use」は,外部モジュールを使うための命令です。モジュール名を指定すると,そのモジュールを呼び出してくれます。

 モジュール名が小文字だけのものを特に「プラグマ・モジュール」または「プラグマ」と呼びます。普通のモジュールとは異なり,関数やクラスを提供するものではありませんが,プログラム全体の動作に影響を与えます。

 プラグマにはいろいろあります。特に覚えておいてもらいたいのが「strict」プラグマです。例えば次のコードを見てください。

use encoding 'shift-jis';
use strict;
$str = "日経ソフトウエア";
print "$str\n";
print length($str), "\n";

 先ほど紹介した文字列を表示するコードです。ただし,2行目に「use strict」を挿入しています。このコードを実行するとエラーが発生します(図3[拡大表示])。

 strictプラグマは,コーディング・ミスの原因になったり,保守に支障をきたすような書き方を禁止するプラグマです。この場合は,3行目で変数($str)を宣言せずに使ったためにエラーになっています。この場合,3行目の先頭に「my」と半角スペースを追加して,変数を宣言してから代入する形にすれば正しく動くようになります。
 strictプラグマは,宣言していない変数のほかに,ベアワード(引用符で囲まれていない裸の単語。状況により文字列や関数に解釈されてしまう)やシンボリック・リファレンス(文字列によるリファレンス)を使うことを禁じます。短いプログラムではこのような制限は不要ですが,ある程度長いプログラムを書くときは制限したほうが予期せぬバグを防ぐ効果があります。


図A●CPANのサーチ・サイト。モジュールを探索するときはここから始めるとよい
図B●PPMで「Regexp::Assemble」をダウンロードしているところ。ダウンロードすると自動的にインストールまでしてくれる

PPMで拡張モジュールをインストール

 Perlの外部モジュールには,処理系に標準で備わっていてすぐに使えるものと,ダウンロードしてインストールしなければならないものがあります。モジュールを入手するときに便利なのが,CPAN(Comprehensive Perl Archive Network, http://cpan.org/)というWebサイトです。ここには世界各地のいろいろな人が開発したモジュールが集まっています。

 CPANには膨大な数のモジュールがあります。Perl最大の財産はこのCPANであると言われるほどです。いろいろなモジュールがあるのは良いのですが,そこから目的のモジュールを探すのは一苦労です。このようなときはCPANのサーチ・サイト(http://search.cpan.org/)を使いましょう(図A[拡大表示])。モジュールをジャンル分けしてあるので,目的のジャンルから探すこともできますし,文字列検索もできます。

 CPANではモジュールの検索だけでなく,ダウンロードもできます。ただし,開発環境が標準ではインストールされていないWindowsの場合はCPANからモジュールをダウンロードしてもインストールが面倒です。このようなときに役立つのがActivePerlに付属する「PPM(Perl Package Manager)」です。

 PPMは,「スタート」メニューの「ActivePerl」-「Perl Package Manager」から起動できます。また,コマンドプロンプトで「ppm」と打ち込んでEnterキーを押してもOKです。起動するとコマンドプロンプトのインタフェースが起動し,「ppm>」というプロンプトが現れます。

 ここでは,本文でも使った「Regexp::Assemble」モジュールのインストール方法を説明します。プロンプトが出てきたら,「search Regexp」と入力してEnterキーを押します。すると,名前に「Regexp」という文字列を含むモジュールが出てきます。Regexp-Assembleというモジュールの存在を確認したら,「install Regexp-Assemble」を実行すればモジュールをインストールできます(図B[拡大表示])。

 とりあえずは,これだけ覚えておけばモジュールのインストールはできます。ちなみに,「help」と入力するとPPMの使い方を参照できます。また「help コマンド名」と入力すると各コマンドの詳細なヘルプが表示されます。興味のある人は参照してください。

(イメージズ・アンド・ワーズ 山口 晴広)