Perlのプログラミングや利用方法を基本的を中心に情報提供しています
制御構文
Perlはインタプリタな言語です。ソースコードを直接解釈実行します。C言語などのようにコンパイル後に実行ファイルを作成するのではなく、ソースコードに記述された内容を実行時に順次処理していきます。
Perlの真偽値
真と偽
真 (true) と偽 (false) について値
偽 |
数値の 0 文字列の "0" 空き文字列 "" 未定義値 undef() |
真 | 上記以外のもの |
条件分岐
if文
Perlで条件分岐を行うにはif文を使用します
構文 |
if ( 条件A ) { 実行A } elsif ( 条件B ) { 実行B } else { 実行C } |
内容 |
もし、「条件A」が真であるならば、「実行A」を実行 もし、「条件A」が偽で、「条件B」が真ならば、「実行B」を実行 もし、「条件A」「条件B」が偽であるならば、「実行C」を実行 |
# if文
# 数値比較
my $num = 5;
if ($num == 5) {
print "OK";
}
# 文字列比較
my $token = '東京':
if ($token eq '東京') {
print "OK";
}
if~else文
if~elsif文を使うと、条件を複数記述することができます。
# if~else文
# elseifとelseの組み合わせ
my $num = 5;
if ($num == 5) {
print "数値は 5";
}elsif ($num == 7) {
print "数値は 7";
}elsif ($num == 9) {
print "数値は 9";
}else {
print "一致しません";
}
論理演算子
論理演算子を使うことによって複合的な条件や否定を表現することができます。
演算子 | 意味 |
|| | 論理和 |
&& | 論理積 |
! | 否定 |
or| | 論理和(&&より優先順位が低い) |
and | 論理積&&より優先順位が低い) |
not | 否定(!より優先優位が低い) |
$yearが1989以上、かつ、2019以下という条件にするためには && を使います。
# && 論理積(A かつ B)
if ($year >= 1989 && $year <= 2019) {
print "平成";
}
$ageが「20より小さい、または、60より大きい」という条件にするためには || を使います。
# || 論理和(A または B)
if ($age < 20 || $age > 60) {
...
}
変数「$num」が「真ではない」という条件
# ! 否定(Aではない)
if (!$num) {
...
}
# unless文 上記if文と全く同じ意味
# $numが真でなければブロックを実行
unless ($num) {
...
}
三項演算子
三項演算子を使うと、ifの条件式を短縮して(一行にして)表記できます。
構文 : [条件式] ? [真のとき評価される式] : [偽のとき評価される式]
# 三項演算子
$age = 18;
print $age >= 20 ? "成人" : "未成年";
> 未成年
$num = 330;
$result =
$num >= 420 ? 'Lサイズ' :
$num >= 300 ? 'Mサイズ' :
$num >= 210 ? 'Sサイズ' :
'不可';
print "ドリンク量は$resultです";
> ドリンク量はMサイズです
繰り返し文 ループ文
ある条件のもとで、処理を繰り返し実行します。
構文名 | 構文 | 内容 |
while文 | while ( 条件 ) { 実行 } | 「条件」が真である間は「実行」する |
until文 | until ( 条件 ) { 実行 } | 「条件」が偽である間は「実行」する |
do {} while文 | do { 実行 } while ( 条件 ) | 「実行」を1度実行し、条件が真である間は「式」をさらに実行 |
do {} until文 | do { 実行 } until ( 条件 ) | 「実行」を1度実行し、条件が偽である間は「式」をさらに実行 |
for文 | for ( 初期化 条件式 増減式 ) { 実行 } | 「条件式」が真であれば「実行」する、次に「増減式」を実行 |
foreach文 | foreach 制御変数 ( リスト値 ) { 実行 } | 「リスト値」の要素を順に「制御変数」にセットし、「実行」する |
# while文
my $i = 0;
while ($i <= 2) {
print "$i \n";
$i++;
}
> 0
> 1
> 2
# until文
my $i = 0;
until ($i >= 3) {
print "$i \n";
$i++;
}
> 0
> 1
> 2
# do {} while文
my $i = 0;
do {
print "$i \n";
$i++;
}
while ($i <= 2) ;
> 0
> 1
> 2
# do {} until文
my $i = 0;
do {
print "$i \n";
$i++;
}
until ($i >= 3) ;
> 0
> 1
> 2
# for文
for (my $i = 1; $i <= 3; $i++) {
print "$i \n";
}
> 1
> 2
> 3
# foreach文
foreach my $i (1, 2, 3) {
print "$i \n";
}
> 1
> 2
> 3
ループ制御
ループの流れを変えるために、次の3つの演算子が用意されています。
演算子 | 内容 |
next | ループをスキップする |
last | ループを終了する |
redo | ループを先頭の位置まで戻してやり直す |
# next演算子
for (my $i = 1; $i < 5; $i++) {
if ($i == 3) { next; }
print " $i \n";
}
> 1
> 2
> 4
# last演算子
for (my $i = 1; $i < 5; $i++) {
if ($i == 3) { last; }
print "$i \n";
}
> 1
> 2
# redo演算子
my $n = 0;
foreach my $i (1 .. 5) {
print "$i \n";
if ($i == 3) {
$n++;
last if ($n >= 2); # やり直しは2回で終了(無限ループ回避)
# $iが3になったらループやり直し(ループの先頭へ移動する)
redo;
}
}
> 1
> 2
> 3
> 3