インターネット&PC120%活用:インターネット活用編

演算子(算術演算子、関係演算子)

PERLの演算子についてまとめてみました。
PERLの演算子は他の言語(BASICとかCとか)と若干違うところがあります。

1 算術演算子

(1) 算術演算子
算術演算子は他の言語とほぼ同じです。(C言語とほぼ同じかな)
足し算: +  ($a=1+2; で $a は 3 になる)
引き算: -  ($a=5-1;で $a は 4 になる)
掛け算: *  ($a=2*3で $a は 6 になる)
割り算: /  ($a=6/2;で $a は 3 になる)
余り : % ($a=8%3;で $a は 2 になる)
べき乗 : **  ($a=10**3;で $a は 1000 になります。)
ルート[平方根]を求めるのに sqrt()という関数も用意されていますが ** 0.5 で求めることもできます。

あえて他言語との違いをあげれば
BASICでは一般に、余り(剰余)は mod です。また商を求める演算子として \ がありますが
おじさんの知る限りではPERLのバージョン5以下では商を求める演算子はありません。

(2) 商を求める、四捨五入する
商を求める。
PERLの変数は、数値の場合に整数型、実数型という区別がなくすべて実数として扱われます。
従って $a=4/3; とすると $aは 1.33333333....... になります。(一般にPERLは倍精度実数として
数値をあつかいます)
従って、商をもとめるには 
$a=int(4/3);
とします。intは小数点以下を切り捨てた整数値を返す関数です(ご存知の通り)。

四捨五入は0.5を足して以下のようにすればいいでしょう。
変数$bを四捨五入したい場合、 
$b=int($b+0.5);

(3) インクリメント、デクリメント演算子
C言語と同様、インクリメント、デクリメント演算子があります。

$a++;  これは $a=$a+1; と同じです。
$a--;  これは $a=$a-1; と同じです。

BASICプログラマーには見慣れない形ですが、すぐに慣れるでしょう。

(4) 文字の連結
PERLでは文字の連結には . ピリオドを使います。
$a="Hello";
$b="Everybody";
$c=$a.$b;
で$cはHelloEverybodyになります。
ここはBASICともCとも違うところです。

更に、けったいなことには(あるいは超便利?)、本来数値であった変数を . で連結して文字変数に
できてしまう点です。
例えば、
$a=1;
$b=2;
$c=$a.$b;
とすると、$a, $bは元来数値変数なのに、文字として連結されて$cには文字変数として12が入ります。
実例が変数その2にありますので参照して下さい。


2 関係演算子
PERLの関係演算子は少々独特です。
BASICでは、数値の大小の比較も文字列の大小の比較も、=, <, > でやりますが
PERLでは数値の場合と文字の場合で使う演算子が異なり以下のようになります。

PERLでは関係演算子の演算の結果、一般的には真の時は数値の1、偽は数値の0が返されます。
(cmpのような3パターンの結果を返す演算子もある)

数値演算子    文字演算子   内容          例            
== eq 等しい $x == $y,$x eq $y
!= ne 等しくない $x != $y,$x ne $y
< lt 小さい $x < $y,$x lt $y
> gt 大きい $x > $y,$x gt $y
<= le 小さいか等しい $x <= $y,$x le $y
>= ge 大きいか等しい $x >= $y,$x ge $y

 他に以下のような関係演算子があります。

演算子 使用例 内容
cmp $a cmp $b $aの文字コードが$bの文字コードが大きければ1、等しければ0
小さければ-1
=~ $a =~ /example/ $aの中に正規表現exampleにマッチする文字列があれば真
!~ $a !~ /example/ $aの中に正規表現exampleにマッチする文字列がなければ真

関係演算子は基本的には if ( ) 文等の条件分岐ステートメントの中で使われます。
ここではでは、パターンマッチのプログラム例をあげてみます。

以下はaという文字が入っているかどうかパターンマッチで判別するプログラムです。

pattern.pl
# pattern.pl パターンマッチテスト
print "文字を入力してください  ";
$s=<stdin>;
chop($s);
if($s =~ /a/){
   print "aを含んでいる\n";}      
else {
   print "aを含んでいない\n";}


実行例です。


E:\jplwin32>jperl pattern.pl       
文字を入力してください abc123      
aを含んでいる

E:\jplwin32>jperl pattern.pl
文字を入力してください ghi123
aを含んでいない

E:\jplwin32>

 

TopPage 

inserted by FC2 system