今回紹介するのは、今も根強い人気を誇るスクリプト言語のPerlです。強力な文字列処理の機能を持っており、Webサービスの開発やシステム管理などに利用されています。今日はPerlの魅力に迫ってみましょう。
Perlとは
Perlはオープンソースのスクリプト言語です。マルチプラットフォームに対応しており、Windows/macOS/Linuxと様々な環境で動かすことができます。言語学者でもあるラリーウォール氏が1987年に開発しました。
その特徴は実用性と多様性です。Perlには様々なライブラリが用意されており、実用的な処理を記述できます。また、多様性に関してですが、一つの処理を記述するのに、いくつもの記述方法を許容しており、好きな書き方でプログラムを記述できます。
加えて、macOSやLinuxではシステムになくてはならないツールとなっており、多くの環境で最初からPerlがインストールされています。
Perlが世の中に与えたインパクト
多くのスクリプト言語がPerlの影響を受けて開発されています。例えば、RubyやPythonは大きな影響を受けています。Ruby開発者のまつもと氏は「Rubyは『Perlの次』としてデザインした」と明言しています。スクリプト言語のPythonが開発されたのは1990年、Rubyの登場は1993年になってからです。そうです、Perlはスクリプト言語の先駆けとして、他のプログラミング言語の歴史に大きな影響を与えました。
そして、Perlがすごいのは多くの言語に影響を与えたというだけではなく、今なお現役の言語として活躍している点にあります。一時期よりは人気に陰りが出ているとは言え、常にプログラミング言語のランキング(TIOBE INDEX)では、20位圏内に入っています。
CPANについて
Perl人気の秘密の一つが、CPAN(Comprehensive Perl Archive Network)です。これは、Perlのライブラリを集めた巨大なWebサイトです。汎用性の高いモジュールが多数登録されています。そして、CPANの特徴ですが、あるモジュールがどのモジュールに依存しているのかという依存情報も保持しています。そのため、CAPNシェルというツールを使って、一つのモジュールをインストールすると、それが必要とする別のモジュールも一緒にインストールされて便利です。
プログラマーの三大美徳
また、Perl開発者のラリーウォール氏はカリスマプログラマーであり、プログラマーの三大美徳を唱えたことでも有名です。彼が唱えた三大美徳は以下の三点です。
- 怠惰(Laziness)
- 短気(Impatience)
- 傲慢(Hubris)
これには、それぞれ理由があります。「怠惰」であれば開発効率を気にして、最大限効率的なプログラムを書くことができます。また「短気」であれば、できるだけ実行速度の速いプログラムを書くことでしょう。そして、「傲慢」に振る舞うためには、書いたプログラムに自信を持っている必要があります。つまり、プログラマーの品質が良いので傲慢に振る舞うことができるということを表しています。そして、もちろん、これらの三大美徳は、Perlの言語設計にも大きく反映されているのです。
Perlをインストールしよう
macOSにはPerlが最初からインストールされているので、ここでは、Windowsのインストール方法を紹介します。
Windows用のPerlは、「ActivePerl」が有名です。Webサイトは英語ですが、それほど難しいところはないでしょう。[Download Now]をクリックし、Windows用のインストーラー「Windows Installer (EXE)」をクリックします。
インストーラーをダブルクリックして実行したら、あとは[Next]を数回クリックするだけでインストールが完成します。
ただし、今回は、Perlをコマンドプロンプトから利用するので、オプションの選択画面が出たら「Add Perl to the PATH env...」にチェックを入れるようにしましょう。
一番簡単なプログラムを実行してみよう
それでは、Perlの一番簡単なプログラムを実行してみましょう。テキストエディタを起動したら、以下のプログラムをコピー&ペーストしましょう。そして、「hello.pl」という名前で保存します。
print "Hello,\n";
print "World!\n";
そして、Windowsの場合はPowerShellを、macOSの場合はターミナル.appを起動しましょう。そして、以下のコマンドを実行しましょう。
perl hello.pl
すると、以下のように表示されます。Perlでは、画面に文字を表示するには、『print "xxx";』 のように書きます。
FizzBuzzを作ってみよう
それでは、よりPerlの雰囲気を感じるために、FizzBuzz問題を解いてみましょう。この問題は、本連載で何度も例題として持ち出しているものです。
FizzBuzzとは、1から100までの数字を出力するのですが、3の倍数の時「Fizz」、5の倍数の時「Buzz」、3と5の倍数の時「FizzBuzz」と表示するものです。
以下のプログラムを「fizzbuzz.pl」という名前で保存しましょう。
# FizzとBuzzの条件を定義 --- (*1)
sub isFizz { $_[0] % 3 == 0; }
sub isBuzz { $_[0] % 5 == 0; }
# FizzBuzzに応じた値を返すよう定義 --- (*2)
sub fizzbuzz {
my ($i) = @_;
if (isFizz($i) && isBuzz($i)) {
return "FizzzBuzz";
} elsif (isFizz($i)) {
return "Fizz";
} elsif (isBuzz($i)) {
return "Buzz";
} else {
return $i;
}
}
# 100回fizzbuzzサブルーチンを呼び出す --- (*3)
for (1..100) {
print fizzbuzz($_) . "\n";
}
そして、コマンドラインで以下のコマンドを実行しましょう。
perl fizzbuzz.pl
すると、FizzBuzzの結果が表示されます。
プログラムを確認してみましょう。(*1)の部分では、FizzBuzzの条件をサブルーチンとして定義します。$_[0]というのがサブルーチンに与えられた一つ目の引数を意味します。これが3で割り切れればFizzを満たす条件、5で割り切れればBuzzを満たす条件になります。
次に(*2)の部分では、FizzBuzzに応じた値を返すサブルーチンを定義します。サブルーチンの定義で「my ($i) = @_;」とありますが、これは、変数$iに一つ目の引数を代入するという意味になります。このように、Perlは記号的です。変数を$iのように表し、サブルーチンを呼び出すときに与えた引数の全体を「@_」の記号で表します。
そして、(*3)の部分では、fizzbuzzサブルーチンを100回呼び出します。
Perlのまとめ
以上、今回はPerlについて紹介し、FizzBuzz問題を解く簡単なプログラムも作ってみました。筆者が最初にPerlを書いたのはずいぶん前ですが、柔軟で自由度の高いPerlの面白さに夢中になったのを思い出します。文字列処理が得意なので、ちょっとしたデータの整形によく使っていました。データ整形などちょっとした仕事だけでなく、本格的なWebアプリを作ったりと、実用性が高いのもPerlの特徴です。根強い人気を持つPerlは、これからも様々な場所で使われていくことでしょう。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2005年IPAスーパークリエイター認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。