あるプログラムができあがったが,テスト用のデータが無かったので,急いでデータを作るプログラムを書いた――こんな経験はないでしょうか。プログラミングをしていると,このような“ちょっと面倒だな”と思うデータの処理をしなければいけない機会が意外と多くあるものです。
スクリプト言語は,プログラマが“ちょっと面倒だな”と感じる問題を,素早く解決するための言語です。C言語,C++,Javaといった本格的なプログラムを書くプログラミング言語に対して,スクリプト言語はこれまで「簡易的な言語」として扱われてきました。しかし現在,PerlやRubyといったスクリプト言語は,言語仕様やライブラリが拡張され,複雑なプログラムや規模が大きいプログラムも記述できるようになっています。たとえば,ウィンドウを表示して,ボタンをクリックしたら処理を始める――といったVisual Basicが得意とするような処理も作れます。また大規模なシステムも十分開発できます。
いずれにせよ,今も昔も変わらないのは,これらのスクリプト言語が,ちょっと面倒な処理を素早く解決するのに向いているという特性です。本特集では,PerlとRubyという二つのスクリプト言語の特徴を解説し,そのあと具体的な五つの例題を解いてみます。読んでみて,便利そうだと感じたら,ぜひマスターしてみてください。
Perlとはどんなもの?
Part1では現在もっとも広く利用されているスクリプト言語であるPerlを紹介します。最初に概要をまとめておきましょう。
・インタプリタ*1として動作する・テキスト処理機能が強力
・ライブラリが充実している
・Windows,各種UNIX,Linuxなど多くのOSで動作する
・無償で利用できる*2
・ドキュメントが充実している
いいことばかりを書いてしまいました。一方,筆者が考えるPerlの問題点は以下のようなものです。
・ソースコードに記号が多く,可読性が悪い感じがする・言語仕様が整理されておらず,雑然としている
・仕様を正確に理解するのがけっこう大変
しかし,最初にちょっと我慢すればすぐに慣れて,とっつきにくさは消えます。さらに仕様をすべて正しく理解することをある程度無視しても,Perlはそれなりに使えてしまいます*3。以下ではPerlがどのような言語なのかをざっと解説していきます。ひとまず読んでから,自分がPerlを使う価値がありそうかどうかを判断してみてください。
この記事を読んで,もうちょっとPerlをちゃんと学びたいと思った方には「初めてのPerl 第3版*4」をお薦めします。また,Perlで書かれたソースコードにたくさん触れて,Perlの理解を深めたいと思われた方は,「結城 浩のPerlクイズ*5」が楽しく読めるでしょう。
変数の型宣言は不要
| ||
| ||
| ||
|
Perlの変数と配列から見ていきましょう。リスト1[拡大表示]は変数の例です。
(1)はこのプログラムがPerlで動作することを示しているものです。UNIXやLinuxを普段から使っている方はおなじみの表記法*6ですね。(2)で変数の登場です。Perlでは変数名の頭に「$」を付けることで,それが変数であることを表します。他のプログラミング言語に慣れている方は,ちょっとなじみにくいかもしれません。
(2)の行では変数$nameに,文字列“Nikkei”を代入しています。(3)の行ではPerlのprint関数を利用して,$nameの内容を画面に出力しています。(4)は“ Software”という文字列を表示します。(4)の最後にある「\n」は改行コードです。(3)と(4)を合わせて画面には「Nikkei Software」と表示されます(図1[拡大表示])。なおprint関数は,
print $name, "Software\n"
のように,複数の式を並べて記述することもできます。
Perlの変数を利用するとき,変数の型を意識する必要はありません。文字列を代入すれば文字列型に,数値を代入すれば数値型*7になります。したがって,先ほどまで「Nikkei」という文字列を格納していた変数$nameを数値「123」で上書きできます(5)。$nameはこの瞬間に数値型になるので,(6)のように演算できます。(7)の行で出力すると,画面には「124」と表示されます。
このような仕様のおかげで,型を指定して宣言する必要もありません。コーディング中に新たな変数を使いたくなったら,そこで変数の名前を考えて,そのまま書けばよいのです。気ままにプログラミングしたいときには楽ができますね*8。
配列全体は「@」個々の要素は「$」
次は配列を見てみましょう(リスト2[拡大表示])。(8)は配列@sushiを用意して,uni,maguro,ikuraの三つの文字列を配列に順番に代入しています。sushiの前にある「@」はそれが配列全体であることを意味します。
配列の要素も変数と同様に型を宣言する必要がありません。一つの配列に,@sushi = ("uni",123);
と,文字列と数値を混在させることもできます。
配列の要素にアクセスするにはインデクスを使います。アクセスするときの書式は
$配列名[インデクス]
です。@ではなく$が付いているのを不思議に思うかもしれませんね。上の書式は「インデクス」で指定された配列の要素で,それは「変数」であると考えられるからだ,と理解してください。
(9)で上の書式を利用して配列の各要素にアクセスしています。最初の要素を指し示すインデクスは0,次の要素は1です。この時点で画面には「uni,ikura」と表示されます(図2[拡大表示])。
配列の先頭要素$sushi[0]は,$sushi[]と書くこともできます。しかし$sushiと書くと,それはまったく別の変数を指します(10)。(11)の行を実行すると,「uni」ではなく「tamago」と表示されます。もちろん,$sushiは配列@sushiとも違います。Perlのコードを読むときは変数名の後ろに[ ]や{ }があるかどうかに注意してください。[ ]がある場合は配列,{ }はこの後すぐに解説するハッシュです。