Perlの基本文法

はじめに

備忘録の意味も含めて、Perlの基本文法をまとめたいと思います。Perlでは、同じ目的を達成するために様々な書き方が存在します。ここでは、標準的(と私が考える)なものを極力選びました。

スクリプトの実行

Perlで書かれたスクリプトを実行するには、コマンドライン上でperlコマンドを利用します。

$ perl test.pl

構文チェックのためにコンパイルのみを行うには-cオプションを付けます。

$ perl -c test.pl

デバッガを利用するには-dオプションを付けます。

$ perl -d test.pl

また、スクリプトの先頭のシバン(Shebang)でperlインタプリタを指定すれば、スクリプト名だけで実行できます。ファイルに実行権限を与えることをお忘れなく。

#!/usr/bin/perl
...
$ chmod u+x test.pl
$ ./test.pl

コメント

一行コメント

一行をコメントアウトするには#を利用します。行の途中から利用することもでき、#から行末までがスクリプトの実行中に無視されます。

# Comment here
if ($x > 50) {
...
}

my $x = 100; # Comment here

複数行コメント

複数行を同時にコメントアウトするには、対象の行を=podと=cutで囲みます。ただ、通常は複数行であっても#を利用する場合が多いと思います。

=pod
Multiple lines
can be commented
like this.
=cut

変数

スカラー変数

スカラー変数とは、文字列や数値など、一つの値を格納するために使う変数です。変数名は必ず「$」で始め、半角英数および「_」(アンダースコア)が利用できますが、命名規則としてスネークケース(小文字の英語と数字だけを使用し、文字間の連結にアンダースコアを利用する方法)にするのが一般的です。

$number = 10;
$site_url = 'http://blog.codebase.co.jp';

配列変数

配列変数とは、複数の値を順番に格納するために使う変数です。変数名は「@」で始め、それ以降はスカラー変数と同様です。

@fruits = ('Apple', 'Orange', 'Banana');

上記のように、複数の値を同時に格納することもできますし、以下のように何番目に格納するか番号で指定することも可能です。

$fruits[0] = 'Apple';
$fruits[1] = 'Orange';
$fruits[2] = 'Banana';

この場合は、変数名の先頭が「$」になることに注意してください。

ハッシュ変数

ハッシュ変数とは、連想配列変数とも呼ばれ、複数の値をキーを指定して格納するために使う変数です。変数名は「%」で始め、それ以降はスカラー変数と同様です。

%profile = ('Name' => 'Taro', 'Gender' => 'Male', 'Tel' => '090-xxxx-xxxx');

配列と同様、個別にキーを指定して代入することもできます。

$profile{'Name'} = 'Taro';
$profile{'Gender'} = 'Male';
$profile{'Tel'} = '090-xxxx-xxxx';

制御構文

条件分岐

if – elsif – else

条件分岐にはifを使います。

my $fee;
if ($age >= 20) {
    $fee = 1800;
} elsif ($age >= 12) {
    $fee = 1000;
} else {
    $fee = 0;
}

繰り返し

for (foreach)

指定した回数分繰り返すにはforが便利です。

for (my $i = 0; $i < 10; $i++) {
    print $i;
}

また、配列の中身を展開する場合にも利用することができます。

my @fruits = ('Apple', 'Orange', 'Banana');
foreach my $fruit (@fruits) {
    print $fruit;
}

ちなみに、forもforeachも文法上区別はありませんが、私は上記のような使い分けをしています。

Perlで環境変数の取得と設定

Perlにおいて、OSの環境変数は「%ENV」という連想配列に格納されています。よって、例えば「PATH」という環境変数は、

my $path = $ENV{"PATH"};

という形で取得することができます。設定するのも簡単で、%ENVに要素を追加するだけです。

$ENV{"PATH"} = $path;

die()によるメッセージから行番号を除く

Perlにおいて、例外処理としてdie()をevalでキャッチして、その処理の中でdie()の引数として渡した文字列を利用する場合があると思います。例えば、次のようなコードになります。

$ vim die_test
#!/usr/bin/perl

eval {
    die "Exception occurred";
};
if ($@) {
    print $@;
}

このスクリプトを実行すると、

$ ./die_test
Exception occurred at die_test line 4.

というアウトプットがコンソールに表示されると思います。エラー表示だけならば特に問題はありませんが、メッセージを他の処理で利用したい場合、「at die_test line 4」の部分が邪魔くさくなります。これを防ぐ方法は実はシンプルで、die()の引数のメッセージの最後に改行コード(\n)を加えるだけです。

#!/usr/bin/perl

eval {
    die "Exception occurred\n";
};
if ($@) {
    print $@;
}
$ ./die_test
Exception occurred

配列の要素数の取得

配列の要素数を取得するには、スカラーコンテキストで評価をします。

my @array = ("Apple", "Orange", "Tomato");

# $countという変数に代入する
my $count = @array;
print $count;

scalar関数を利用する方法もあります。こちらの方が簡単ですね。

print scalar(@array);

 

Top