シェル/スクリプト言語お勉強備忘録
Perlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しよう

3−2.演算子

Perlのプログラムでは数値と文字列の扱いの違いはほとんどありません。が、演算子を使う場合、扱いが変わってきます。演算子を使うと数値と文字列を勝手に変換します。演算子のパターンを全て紹介すると切りがないので一部を紹介して詳しく知りたい場合は専門書などを購入されることをお奨めします。

例1)
 #!/bin/perl
 $kazu1 = "1";
 $kazu2 = "2";
 $keisan = $kazu1 + $kazu2;
 print "$kazu1 + $kazu2 = $keisan\n";

結果1)
 1 + 2 = 3

例2)
 #!/bin/perl
 $kazu1 = "5a";
 $kazu2 = "5";
 $keisan = $kazu1 + $kazu2;
 print "$kazu1 + $kazu2 = $keisan\n";

結果2)
 5a + 5 = 10

上記の例は計算時に5aが数値の5に変換された例になります。

■比較演算子

意 味 数値 文字列
等しい == eq
等しくない != ne
より小さい lt
より大きい gt
より小さいか等しい <= le
より大きいか等しい >= ge

これは比較時に使う演算子なので特に説明はしません。

■数値演算子・文字列演算子/文字列繰り返し演算子/文字列連結演算子

このあたりはC言語を知っている人は同じように使用できます。

文字列演算子については簡単な例を下記に紹介します。
−文字列繰り返し演算子
 "Repeat" x 5   ⇒ "RepeatRepeatRepeatRepeatRepeat"になります。
ここでは「x」が文字列繰り返し演算子で左の文字列を右の数値分だけ繰り返したものを結果として返します。

−文字列連結演算子
 $str = "Good";
 $str .= "!!";
 Good!!
ここでは「.」が文字列連結演算子で左の文字列に右の文字列を連結したものを結果として返します。

主な演算子の優先順位について
演算子 演算子の役割 優先順位
++
−−
インクリメント
デクリメント












































論理not
ビットnot
単項マイナス
** べき乗
=〜
!〜
マッチする
マッチしない



乗算
除算
剰余
文字列繰り返し


加算
減算
文字列連結
<<
>>
ビットシフト

<=

>=
lt
le
gt
ge
比較演算子(非等価)
==
!=
<=>
eq
ne
cmp
比較演算子(等価)
ビットand

ビットor
ビット排他的or
&& 論理and
|| 論理or
.. 範囲演算子
?: 3項if/then/else
+=など 代入演算子

chop演算子

 配列に対して使用すると全ての要素の最後の1文字をカットしてくれます。
例)
 #!/bin/perl
 @foo = (11,21,31,41);
 chop(@foo);
 print "@foo\n";

結果)
 1 2 3 4

reverse演算子

 リストの要素の順番を逆転させます。
例)
 #!/bin/perl
 @hoge = (1,3,5,7);
 @geho = reverse(@hoge); ⇒ @gehoは(7,5,3,1)となる。

push/pop演算子

 プログラム中で配列をスタックとして使うときに使用します。
例)
 #!/bin/perl
 push(@foo);     @fooがスタックされる
 $goo = pop(@foo);  $gooに@fooの要素が戻される

sort演算子

 引数を文字列とみなして並べ換えます。
例)
 #!/bin/perl
 @foo = sort("456","123","789");

結果)
 @fooには("123","456","789")と入ります。

注)上記例のように数値を入れても文字として解釈されます。

keys演算子

 連想配列のキーのリストを取得することができます。
例)
 #!/bin/perl
 %foo = ("Spring","April","Summer","August");
 @foo = keys(%foo);
 print "@foo\n";

結果)
 Spring Summer

each演算子

 キーと要素の組をリストにして返します。
例)
 #!/bin/perl
 %foo = ("Spring","April","Summer","August","Winter","December");
 while (($key,$elem) = each(%foo)){
      print "$elem is a $key.\n";
 }

結果)
 Spring is a April.
 Summer is a August.
 Winter is a December.

注)返ってくる順番は(キー,要素)という状態で返ってきます。

delete演算子

 配列の要素を取り除きます。
例)
 #!/bin/perl
 %foo = ("Spring","April","Summer","August","Winter","December");
 delete $foo{"Spring"};
 print "\$foo{\"Spring\"} is $foo{\"Spring\"}.\n";
 print "\$foo{\"Summer\"} is $foo{\"Summer\"}.\n";
 print "\$foo{\"Winter\"} is $foo{\"Winter\"}.\n";

結果)
 $foo{"Spring"} is .
 $foo{"Summer"} is August.
 $foo{"Winter"} is December.

split演算子

 文字列を切り分けます。
例)
 #!/bin/perl
 $foo = "April:August:December";
 @word = split(/:/,$foo);
 print "\@word is @word\n";

結果)
 @word is April August December

「:」をデリミターとして文字列を分割します。

join演算子

 split演算子とは逆のことを行います。
例)
 #!/bin/perl
 $foo = "April:August:December";
 @word = split(/:/,$foo);
 print "\@word is @word\n";
 $foo2 = join(":",@word);
 print "\$foo2 is " . $foo2 . "\n";

結果)
 @word is April August December
 $foo2 is April:August:December

last演算子

 C言語のbreakに相当します。
例)
 #!/bin/perl
 @list = (1,2,3,4,-5,-6,7,8);
 $i = 0;
 while ($i < 8){
  $sum += $list[$i};
  if ($sum > 0){
   print "$sum\n";
  }else{
   last;
  }
  $i++;
 }

結果)
 1
 3
 6
 10
 5

$sumの値が0より小さくなったら「last」演算子を実行しプログラムを終了します。

next/redo演算子

 通常のループの動きを変える働きをします。
例)
 #!/bin/perl
 while (条件1){
  ##redo##
  命令1;
  命令2;
  命令3;
  if (条件2){
   next;
  }else{
   redo;
  }
  命令4;
  命令5;
  ##next##
 }

「next」が実行されると命令4、命令5を飛ばして「##next##」に飛んでいきます。同様に「redo」が実行されると「##redo##」に飛んでいきます。


戻る
Perlを勉強しよう