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に変換された例になります。 ■比較演算子
これは比較時に使う演算子なので特に説明はしません。 ■数値演算子・文字列演算子/文字列繰り返し演算子/文字列連結演算子このあたりはC言語を知っている人は同じように使用できます。文字列演算子については簡単な例を下記に紹介します。 −文字列繰り返し演算子 "Repeat" x 5 ⇒ "RepeatRepeatRepeatRepeatRepeat"になります。 ここでは「x」が文字列繰り返し演算子で左の文字列を右の数値分だけ繰り返したものを結果として返します。 −文字列連結演算子 $str = "Good"; $str .= "!!"; Good!! ここでは「.」が文字列連結演算子で左の文字列に右の文字列を連結したものを結果として返します。 主な演算子の優先順位について
■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##」に飛んでいきます。 |