Perlの算術演算子
Perlで四則演算を行うための算術演算子について解説します。
加算
足し算を行うには加算演算子「+」を使用します。
# 足し算 my $add = 1 + 1;
減算
引き算を行うには減算演算子「-」を使用します。
# 引き算 my $sub = 9 - 1;
乗算
掛け算を行うには、乗算演算子「*」を使用します。
# 掛け算 my $multi = 5 * 4;
除算
割り算を行うには除算演算子「/」を使用します。
# 割り算 my $div = 9 / 4;
割り算の答えは割り切れないときは小数になります。
簡略な記述による4則演算
自分自身に対して4則演算を行いたいときは簡略な記述方法があります。
# $add = $add + 3 と同じ $add += 3; # $sub = $sub - 5 と同じ $sub -= 5; # $multi = $multi * 2 と同じ $multi *= 2; # $div = $div / 7 と同じ $div /= 7;
商と余りを求める
商を求める演算子はありません。 / 演算子で割り算をした後 int関数で整数部を取り出します。
# 商 my $div_int = int( 9 / 4 );
余りを求めるには、剰余演算子を使います。
# 余り my $mod = 9 % 4;
べき乗を求める
べき乗を求めるには**演算子を使用します。
my $two_power_num = 4 ** 2;
べき乗を求めるにはべき乗演算子「**」を使います。べき乗とは、同じ数を複数回かける演算のことです。
インクリメント演算子とデクリメント演算子
ある数値に1を加えたり、1を引いたりする演算には、インクリメント演算子とデクリメント演算子を利用することができます。特別な記述が用意されています。++$i や ++$i という記述を1を加えることができ、--$iや$i--という記述で1を減算することができます。
# インクリメント $num++; # デクリメント $num--;
インクリメントとデクリメントの書き方は++あるいは--を変数の前につけるか後につけるかで2とおりあります。演算子を変数の前につけるか後ろにつけるかで、文脈によって意味が変わるので注意が必要です。
my $i = 0; my $k = ++$i;
my $i = 0; my $k = $i++;
上記の二つは$kに入る値が異なります。最初の場合は、$kには、1が入ります。二つ目の場合は、$kには0が入ります。
前に++をおいた場合は、代入する前に$iが1加算され、後ろに++をおいた場合は、代入が行われた後に$iに1が加算されます。
代入の場合で解説しましたが、関数に値を渡す場合の例も挙げておきます。
# funcの引数には、$iに1を加算したものが渡される。 func(++$i); # funcの引数には、$i が渡され、その後に1加算される。 func($i++);
数値型の自動拡張
Perlは、プログラミング言語上は、数値型を持っていませんが、内部では、数値型を持っています。
32ビット整数で計算できない場合は、環境がサポートしていれば、64bit整数に拡張され計算されます。
また、64bit整数でも表現できない場合は、倍精度浮動小数点型に拡張され計算されます。
文字列の足し算もそのまま行える
Perlでは文字列と数値の変換は自動的に行われ、文字列であっても、数値を含んでいれば、加算演算子で足し算ができます。
my $num_str1 = "34"; my $num_str2 = "56"; my $total = $num_str1 + $num_str2;
テキストファイルから、数値を含んでいる文字列を取得し、そのまま足し算できるので、ちょっとした作業には、Perlが抜群に便利です。
サンプルプログラム
数値計算に関するサンプルプログラムです。
四則演算
足し算、引き算、掛け算、割り算のサンプルです。
use strict; use warnings; print "(1)4則演算\n"; # 足し算 my $add = 1 + 1; # 引き算 my $sub = 9 - 1; # 掛け算 my $multi =5 * 4; # 割り算 my $div = 9 / 4; print "\$add = $add\n"; print "\$sub = $sub\n"; print "\$multi = $multi\n"; print "\$div = $div\n\n"; print "(2)簡略な記述による4則演算\n"; # $add = $add + 3 と同じ $add += 3; # $sub = $sub - 5 と同じ $sub -= 5; # $multi = $multi * 2 と同じ $multi *= 2; # $div = $div / 7 と同じ $div /= 7; print "\$add = $add\n"; print "\$sub = $sub\n"; print "\$multi = $multi\n"; print "\$div = $div\n\n"; print "(3)商と余りを求める演算\n"; # 商 my $div_int = int( 9 / 4 ); # 余り my $mod = 9 % 4; print "\$div_int = $div_int\n"; print "\$mod = $mod\n";
べき乗を求める
べき乗を求めるサンプルです。
use strict; use warnings; # べき乗を求める。 print "1: べき乗を求める。\n"; my $num = 4; my $two_power_num = 4 ** 2; print "$numの2乗は$two_power_numです。\n";
インクリメントとデクリメント
インクリメント演算子とデクリメント演算子を使ったサンプルです。
use strict; use warnings; # 評価される前に1プラスされる。 print "(1)前置のインクリメントとデクリメント\n"; my $i = 0; print ++$i . "\n"; print $i . "\n"; print --$i . "\n"; print $i . "\n"; # 評価された後に1プラスされる。 print "(2)後置のインクリメントとデクリメント\n"; $i = 0; print $i++ . "\n"; print $i . "\n"; print $i-- . "\n"; print $i;