4.0 四則計算

数値変数では、四則計算の計算ができます。$i = $i + 1; という式は、$i という 変数に 1 を加えて 結果を左辺の $i に代入しなさいという意味で す。左辺と右辺が等しいという意味ではありません。

$i = $i + 1; は、$i += 1 と省略できます。( 同様に $i *= 2 と は 2 倍 するという意味 ($i = $i * 2) です)。+= とは 左辺の変 数に右辺の数値を加え、$i に代入するという意味です。加える量 が 1 の 場合には、さらに $i ++ という表現でも表せます。


(例題 4.0) 四則計算や初等関数の計算の例を示します。(p2-0.pl)
#!/usr/local/bin/perl
#
# 1+2 の結果を表示。この場合には 1+2 が print より先に行なわれる。
print 1+2,"\n";
# $x に 3 を、$y に 7 を代入して四則計算の結果を示します。
$x = 3; $y = 7; print $x+$y,"\n"; # 和 $x+$y を表示
$d = $x - $y; print $d,"\n";      # 差を 変数 $d に代入してから表示します。 
print $x=$x+1; print " ",$x,"\n"; # $x に 1 が加わり 4 になりました。
print --$x; print " ",$x,"\n";    # $x から 1 を引き 表示します。
print $x++; print " ",$x,"\n";    # $x を印刷してから $x に 1 が加えます。
#
print '$x * $y'," $x*$y=",$x*$y,"\n";# $x と $y の積。' ' " " の違いに注目。 
print '$x / $y'," $x/$y=",$x/$y,"\n";# $x と $y の割算。
print '$x % $y'," $x%$y=",$x%$y,"\n";# $x と $y の整数の割算の余り。
print '$x ** 2'," $x**2=",$x**2,"\n";# $x の 2乗

4.1 初等関数の計算

いくつかの初等関数 (三角関数、平方根 など) は計算できます。 詳しくは、 パールのマニュアルの数学関数の項 を見て下さい。

結果で 1.2e2 と表示されたらこれは、1.2 x 10**2 という意味です。


(例題 4.1) 初等関数の計算の例をしめします。(p4-1.pl)
#!/usr/local/bin/perl
print sqrt(4.0),"\n";                  # 平方根の表示
# 三角関数は ラヂアンの単位
$p = 3.1415926535;     print $p ,"\n"; # パイを表現
$p = atan2(1.0,1.0)*4; print $p ,"\n"; # パイを arctan(1)=π/4を用いて表現
print sin($p)," ",cos($p) ,"\n"; # sin(π) cos(π) を表示。tan はない。
# 指数関数、対数関数
print exp(1.0)," ",log(1.0),"\n";# 自然対数 e を底とする exp と log
# その他の関数
print int(1.23)," ",int(-1.23),"\n";   # 整数部のみの表示。
print hex(ff),"\n";                    # 16 進数から 10 進数への変換
print oct(77),"\n";                    #  8 進数から 10 進数への変換

4.2 文字変数の計算

文字変数の和は、3.2 で説明した . が使えます。また文字変数の 積は、x であらわします。文字列のなかの一部を取り出す(引き算?) には、 substr 関数を用います。
(例題 4.2) 文字変数の計算の例をしめします。(p4-1.pl)
#!/usr/local/bin/perl
$m = 'どうも';      # $m に 「どうも」 をいれます。
print $m x 3,"\n";  # $m を 3 回繰り返し印刷します。
$m .= ' ';          # $m に space をいれます。$m = $m . ' ' と同じ。
print $m x 3,"\n";  # $m を 3 回繰り返し印刷します。
$m = 'いやー' . $m; # $m の前に文字を足す方法を示します。
print $m x 3,"\n";  # $m を 3 回繰り返し印刷します。
#
# substr($m,0,12) は、$m の 最初の文字 (=0) から 12バイト文字
# 抜きとります。(漢字、平仮名は、1 文字 = 2 バイトです。)
# ここでは、「いやーどうも」が 6 文字 = 12 バイト になります。
#
$m = substr($m,0,12); # $m から 最後の , を再びとります。 
print $m x 3,"\n";    # $m を 3 回繰り返し印刷します。
$m .= ',';            # $m に , をいれます。, を区切り記号に使えます。
print $m x 3,"\n";    # $m を 3 回繰り返し印刷します。
@a =split(/,/,$m x 3);# split (3.2 参照) で 配列に代入します。
print @a,"\n";        # 配列では、, がなくなっています。
$a[1] ='本当にどうも';# 配列の 2 番目の要素をかえます。
#
# join 関数は split の反対です。
# join ("aaa", @a) 配列@a の 要素の間(間だけ)を "aaa"でつなげます。
# 結果は配列でなく 変数になります。"aaa" に "\t" タブ が良く使われます。
#
print "「" . join("です。",@a) . "」". "\n"; # @a を join でまとめます。

以下に p4-2.pl の実行結果を示します。Mosaic の Window を大きくして上のプログラムと比較してみてください。
% p4-2.pl
どうもどうもどうも
どうも どうも どうも 
いやーどうも いやーどうも いやーどうも 
いやーどうもいやーどうもいやーどうも
いやーどうも,いやーどうも,いやーどうも,
いやーどうもいやーどうもいやーどうも
「いやーどうもです。本当にどうもです。いやーどうも」
注意: x の前後にスペースをいれないといけません。'a'x3 とかく と、Perl では 変数で x3 が使われているか、文字変数の積 x 3 か区別できないからです。一般に、+ - * / の場合にも 見やすく するために変数と 演算子の間にはスペースをいれます。