制御構文(1) if

と、コーディングスタイルも調べたので、いよいよ制御構文を勉強します。
まずは条件分岐のif文から。「もしも**なら……する」という文ですね。if の後に指定した条件が真(true)なら、その後のブロックが実行されます。あわせて「それ以外なら……する」というelseも使っています。

# iftest.pl
$age = 18;
 
if ($age >= 20) {
	print "You can drink alcohol. Cheers! :)\n";
} else {
	print "You can't drink alcohol yet. :(\n";
}

age(年齢)が20歳以上($age >= 20)ならお酒が飲めます。
実行すると、

You can't drink alcohol yet. :(

と表示されました。ここで、最初の $age = 18; の部分を $age = 22; に変えて、もう一度実行してみます。

You can drink alcohol. Cheers! :)

乾杯! というわけで、年齢によって表示される文章が変わりました。
次に、「それ以外で**なら」を書いてみようと思い、else if と書いたら syntax error となってしまいました。調べてみると elsif と1語で書くようです。何度も間違えそうです。(-_-;

# iftest2.pl
$hour = (localtime)[2];
 
if ($hour <= 4) {
	print "Good night!\n";
} elsif ($hour <= 12) {
	print "Good morning!\n";
} elsif ($hour <= 16) {
	print "Good afternoon!\n";
} elsif ($hour <= 18) {
	print "Good evening!\n";
} else {
	print "Good night!\n";
}

localtime は日付時刻をリストにして返してくれる組み込み関数です。引数を省略すると現在時刻(time)を指定したのと同じ意味になります。

                #  0    1    2     3     4    5     6     7     8
                ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
                                                            localtime(time);

というリスト形式で返してくれるらしいので、カッコで囲ってから[2]を付ける事で現在の「時(hour)」を得ました。0から23の値が入っているので、その値によって表示する挨拶を変えています。
23時での実行結果です。

Good night!

おやすみなさい... ではなく、もうちょっと続けます。
unless は if 文の反対で、unles の後に続く条件が偽(false)なら、ブロックを実行します。

# leap.pl
$year = (localtime)[5] + 1900;
$is_leap = 0;  # false
 
unless ($year % 4)   { $is_leap = 1 }  # 4   で割り切れるならうるう年である
unless ($year % 100) { $is_leap = 0 }  # 100 で割り切れるならうるう年でない
unless ($year % 400) { $is_leap = 1 }  # 400 で割り切れるならうるう年である
 
if ($is_leap) {
	print "$year is a leap year.\n";
} else {
	print "$year is not a leap year.\n";
}

複雑ですね…… 今年がうるう年かどうかを判定しています。
うるう年のルールは

  1. 年が 4 で割り切れるなら うるう年 である
  2. ただし 100 で割り切れるなら うるう年 ではない
  3. ただし 400 で割り切れるなら うるう年 である

という複雑なルールです。
まず、最初の (localtime)[5] で、今年が1900年から何年経過しているかわかるので、1900を足して今年が何年かを出しています。
次の $is_leap は、うるう年かどうかを表すフラグです。まず 0 で初期化していますが、if 文で数字を使うと 0 が偽、0以外が真となります。Perl には true や false の定数はないみたいですね。
unless ($year % 4) の部分ですが、「$year が 4 で割り切れるなら」という意味です。% 演算子は「割り算の余り」を求める演算子で、4 で割り切れるなら余りは 0 になるはずですね。0 は偽ですが、unless を使えば意味が反転するので、「割り切れるなら」を簡潔に書く事ができました。
実行結果です。

2006 is not a leap year.

また、最初の1行の後に $year = 2000; と書いて、年を変えてみると……

2000 is a leap year.

うるう年になりました。(^_^)