Perlは,Larry Wall氏が開発したスクリプト言語です。Perlと言えば「カウンタや掲示板のCGIを作るための専用言語」という印象を持つ人も多いかもしれません。しかし,本格的なWebサイトやシステム管理などにも使われています。例えば,SNSで国内最大手のミクシィも,LinuxとPerlの組み合わせで,SNSシステムを構築しています。
Perlスクリプトの実行方法
Perlはインタプリタ型言語のため,コンパイルやリンクをして実行ファイルを別途作成する必要がありません。Perlで記述したソース・ファイルをそのまま実行できます。実際には,Perlのインタプリタが起動され,Perlスクリプトを解釈し実行します。Perlのインタプリタは多くのLinuxディストリビューションに標準で装備されています。
例として,以下のようなスクリプトがhello.plというファイル名で作成されているとします。
#!/usr/bin/perl
use strict;
use warnings;
print "Hello, world!\n";
このhello.plを実行する代表的な方法としては2種類あります。1つ目はperlコマンド(perlインタプリタ)の引数として,このスクリプト・ファイルを指定する方法です。
$ perl hello.pl
LinuxのシェルやWindowsのコマンド・プロンプトからこのようにperlコマンドを実行すると,引数で指定されたhello.plを実行して,実行した結果を表示します。Windowsではこの方法が一般的だと思います。
2つ目はスクリプト・ファイルを直接実行する方法です。Linuxではこちらの方法が一般的です。
$ ./hello.pl
このように,スクリプト・ファイルを直接実行することができます。ただし,次のようにエラーになることがあります。
$ ./hello.pl: Permission denied.
これは,ファイルの属性が実行可能になっていないからです。ファイルを直接実行する場合には,ファイルを実行可能にしておく必要があります。実行可能にするためにはchmodコマンドを使用します。
$ chmod 755 hello.pl
これでhello.plが実行可能になります。改めて以下を実行すると,hello.plを実行することができます。
$ ./hello.pl
Hello, world!
$
スクリプトの基本的な書き方
作成したスクリプトを例に,基本的な書き方を説明します。説明のために先頭に行番号を付けました。実際のスクリプトには行番号は書きません。
1: #!/usr/bin/perl
2: use strict;
3: use warnings;
4:
5: print "Hello, world!\n";
まず1行目から3行目ですが,初心者はおまじないだと思っていいでしょう。ここでは一つずつ説明します。
1行目の「#!/usr/bin/perl」は,Perlスクリプトの実行方法の2つ目で説明した,Perlのインタプリタを指定しています。Linuxのシェル上でPerlスクリプトを直接実行した時には,シェルがこの1行目を調べ,#!の後に書かれているコマンドを使って,Perlスクリプトを実行します。
そのため,例えば1行目を「#!/usr/bin/pearl」のように間違って書いてしまうと,Perlスクリプトを直接実行した時に「/usr/bin/pearl」が見つからないのでエラーになってしまいます。ちなみにファイルの先頭に書いてある「#!」のことを「shebang」と呼びます。
2行目の「use strict;」ですが,これを書いておくと,バグの発生を抑えることができます。これを書かなくてもスクリプトは動きますが,「use strict;」によるメリットは大きいですし,今や書くのが当たり前になっているので,使い捨てのスクリプトでない限りは書くようにしましょう。使い捨てのスクリプトや以前からあるスクリプトの改造という場合は別として,新規に作成したスクリプトで「use strict;」が書かれてないのであれば,そのスクリプトの品質は疑っておく方が無難です。
3行目の「use warnings;」は,これを書いておくと警告を表示するようになります。「use strict;」と同様,書かなくてもスクリプトは動きますが,書いておく方が安全です。「use strict;」と違って書き方の制限はされないので「use warnings;」を付けたらスクリプトが動かなくなるということはありません。その代わり警告が表示されるようになるので,警告が出ないようにスクリプトを修正するか,必要に応じて警告を抑止するようにしましょう。警告を抑止する方法については,Perlリファレンスの「no」の項で,いくつかサンプルを紹介しています。
「use strict;」や「use warnings;」のようにスクリプトの動作に影響を与えるもののことをプラグマと呼びます。
4行目は空行なので特に意味はありません。スクリプトを見やすくするために空の行を入れているだけです。
5行目の「print "Hello, world!\n";」で「Hello, world!」という文字列を表示して改行しています。「print」が文字を表示するための関数で,「"Hello, world!\n"」が表示の対象になっています。試しに「Hello, world!」の部分を別の文字に変更してスクリプトを実行してみて下さい。変更した文字が表示されるようになります。