メインメニューを開く

目次

代入演算子編集

  1. = 代入処理に使われます。C言語とは異なり、数字でも文字でも使用することが可能です。
    1. 数字にも使える
      $a = 1; ($aに 1 が代入されます)
    2. 文字にも使える
      $a = "a"; ($aに a が代入されます)
  2. += -= *= /= %= **= 計算結果を代入します。演算の詳細は後の項を参照してください。
    $a += $b; ($aに$aと$bを足したものが代入されます)
  3. .= 文字列を結合して代入します。
    $a .= '(end)'; ($aの末尾に '(end)' が追加されます)

算術演算子編集

  1. + - * / 数値の加減乗除に使われます。
    $a = 1 * 2 + 3 / 4; ($aに 2.75 が代入されます)
  2. % 除算の「余り」を返します。
    $a = 4 % 3; ($aに 1 が代入されます)
  3. ** 数値のべき乗を求めるのに使います。
    $a = $b ** 3; ($aに$bの3乗が代入されます)
  4. ++ --(インクリメント・デクリメント) 数値に1を足したり引いたりします。変数の前におくか後ろに置くかで意味が変化します。
    $a++; #$aの値が1増えます。
    
    $a = 5;
    $b = 3;
    
    print --$a; #$aの値が1減り、4が出力されます。
    print $b++; #画面には3が出力されますが、その後に$bの値が1増えます。

文字列演算子編集

  1. . x 文字列の「連結」と「同語反復」に使われます。
    $a = "a" . "b" x 2; ($aに abb が代入されます)

クオート演算子編集

  1. q qq ' " 文字列を表します。
$a = "Hello, world!";
$b = qq(Hello, world!); # 上と同じ
$c = 'I\'m fine.';
$d = q(I'm fine.); # 上と同じ -- 「'」をエスケープする必要がない
  1. qw qr qx スペースで区切った単語のリスト、正規表現、バッククォート
@a = qw(a b c); # @a = ('a', 'b', 'c'); と同じ
$b = qr/^Regexp$/i;
$c = qx/uname -a/; # `uname -a`; と同じ

ビット演算子編集

  1. | & ~ ビットごとの論理和、論理積、否定を返します。
  2. >> << 右ビットシフト、左ビットシフトを行います。

論理演算子編集

  1. || or && and 主にif文などで、複数の条件を指定するときに使用します。|| と or、&& と and はそれぞれ同じ意味です。(厳密に言えば、or,andの方が優先順位が低いです)
    if ( ( $a == 5 ) || ( $b == 3 ) ) {
     #この部分は$aが5、または$bが3のときに実行されます
    }
    
    if ( ( $a == 8 ) && ( $b == 7 ) ) {
     #この部分は$aが8、かつ$bが7のときに実行されます
    }
  2. orは優先順位が低く、左引数が偽である場合のみ右引数の評価を行い(短絡評価)、最後に評価された値を返すので、例外処理にも使われます。
    $flag or die;

数値比較演算子編集

  1. < > <= >= 不等号を表すのに利用します。
    if ( $a > $b ) {
     #この部分は$aが$bより大きいときに実行されます
    }
    
    if ( $a <= $b ) {
     #この部分は$aが$b以下のときに実行されます
    }
  2. == != 同じ数値であることや、違う数値であることを表すのに使用されます。
    if ( $a == $b ) {
     #この部分は$aが$bと同じ値のときに実行されます
    }
    
    if ( $a != $b ) ) {
     #この部分は$aが$bと違う値のときに実行されます
    }
  3. <=> 左右の値の大小関係により-1, 0, 1のいずれかを返します。これは主にsortで使われます。
    @a = (22, 3, 111);
    
    @a = sort {$a <=> $b} @a;
    # この時点で@aは (3, 22, 111) になっています
    
    @a = sort {$b <=> $a} @a;
    # この時点で@aは (111, 22, 3) になっています
    

文字列比較演算子編集

  1. eq ne 二つの文字列が同じ値かを調べるときに使用します。
    if ( $a eq $b ) {
     #この部分は$aが$bと同じ文字列のときに実行されます
    }
    
    if ( $a ne 'correct' ) ) {
     #この部分は$aに代入されている文字列が 'correct' でなかったときに実行されます
    }
  2. le ge lt gt 二つの文字列の辞書順での大小を比較します。
    if ($a le $b) {
     #この部分は$aが$b以下のときに実行されます
    }
    # le -- less than or equal -- 以下
    # ge -- greater than or equal -- 以上
    # lt -- less than -- より小さい(未満)
    # gt -- greater than -- より大きい(超)
  3. cmp 二つの文字列の辞書順での大小関係により-1, 0, 1のいずれかを返します。これは主にsortで使われます。
    @a = ('3', '22', '111', 'z', 'A', 'a', 'Z');
    
    @a = sort {$a cmp $b} @a;
    # この時点で@aは ('111', '22', '3', 'A', 'Z', 'a', 'z') になっています
    
    @a = sort {$b cmp $a} @a;
    # この時点で@aは ('z', 'a', 'Z', 'A', '3', '22', '111') になっています
    

条件演算子編集

  1. (条件) ? (真) : (偽) 条件が成立する場合は(真)の値を、そうでない場合は(偽)の値を返します。
$a = 1;
$b = $a ? 'true' : 'false'; # $b には 'true' が代入される

範囲演算子編集

  1. リストコンテキストとした場合は範囲を発生
    foreach(1 .. 100) {
      print $_;
    }
    

    とすると、1234567891011.........99100が出力される。

    また、文字列にも適用することができ(マジカルインクリメント)、
    foreach('a' .. 'z') { 
      print $_;
    }
    

    の実行結果は、abcdefg........xyzとなる。 右オペランドが不適切な場合にはその文字列長を超えない範囲の全てを範囲とする。

    foreach('A' .. 'vv'){
      print $_;
    }
    

    の実行結果は、ABCDEFG........ZVZWZXZYZZとなる。

  2. スカラーコンテキストの場合はフリップフロップ演算子となる。オペランドが数値の場合は、暗黙のうちに$.(行番号)と比較 (==) を行う。...演算子を用いた場合は、左オペランドが真となった後、次の行に移ってから右オペランドの評価を行う。
    while (<>) {
        if (1 .. 10) {
            print; # 1行目から10行目を出力
        }
        if (/<head>/ .. /<\/head>/) {
            print; # head要素の内容を出力
        }
    }
    

置換演算子編集

s///編集

  1. s/PATTERN/STRING/

PATTERNにマッチするものをSTRINGに置換します。PATTERNは正規表現です。

$str = "Wiki";
$str =~ s/(Wiki)/$1pedia/;
print $str; # Wikipedia

tr///編集

  1. tr/PATTERN1/PATTERN2/

1文字を対応する1文字に置換します。PATTERNには正規表現ではなく、文字クラスを指定します。

$str = "ABC BCA CAB";
$str =~ tr/ABC/012/; # Aを0に、Bを1に、Cを2に置換
print $str; # 012 120 201

ハイフンを使って範囲指定を行うことができます。

$str = "WIKIBOOKS";
$str =~ tr/A-Z/a-z/; # 大文字を小文字に置換
print $str; # wikibooks

y///編集

  1. y/PATTERN1/PATTERN2/

tr///の同義語です。

このページ「Perl/演算子」は、書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にノートへどうぞ。