Perl 运算符



  • 运算符

    使用表达式 4+5等于9可以给出简单答案。这里4和5称为操作数,而+称为运算符。Perl 语言支持许多运算符类型,但是以下是重要且最常用的运算符列表-
    • 算术运算符
    • 关系运算符
    • 逻辑运算符
    • 赋值运算符
    • 按位运算符
    • 逻辑运算符
    • 类引用运算符
    • 杂项运算符
    让我们一一看一下所有的运算符。
  • 算术运算符

    假设变量$a持有10而变量$b持有20,那么以下是Perl算术运算符-
    操作符 描述 例子
    + 加两个操作数。 $a + $b将得到30
    - 从第一个减去第二个操作数。 $a-$b将得到-10
    * 将两个操作数相乘。 $a * $b将给出200
    / 将分子除以除分母。 $b / $a将给出2
    模运算符和整数除法后的余数。 $b % $a将给出0
    ** 对运算符执行指数(幂)计算 $a ** $b将得到10的20次方
    范例
    
    $a = 21;
    $b = 10;
    
    print "Value of \$a = $a and value of \$b = $b\n";
    
    $c = $a + $b;
    print 'Value of $a + $b = ' . $c . "\n";
    
    $c = $a - $b;
    print 'Value of $a - $b = ' . $c . "\n";
    
    $c = $a * $b;
    print 'Value of $a * $b = ' . $c . "\n";
    
    $c = $a / $b;
    print 'Value of $a / $b = ' . $c . "\n";
    
    $c = $a % $b;
    print 'Value of $a % $b = ' . $c. "\n";
    
    $a = 2;
    $b = 4;
    $c = $a ** $b;
    print 'Value of $a ** $b = ' . $c . "\n";
    
    
    尝试一下
  • 关系运算符

    假设变量$a持有10,变量$b持有20,那么让我们检查以下数值关系运算符
    操作符 描述 例子
    == 检查两个操作数的值是否相等。如果是,则条件变为真。 ($a == $b)为false。
    != 检查两个操作数的值是否相等。如果值不相等,则条件为真。 ($a != $b)为true。
    <=> 检查两个操作数的值是否相等,并根据左参数在数值上小于,等于或大于右参数而返回-1、0或1。 ($a <=> $b)为 -1。
    > 检查左操作数的值是否大于右操作数的值。如果是,则条件变为真。 ($a > $b) 为false。
    < 检查左操作数的值是否小于右操作数的值。如果是,则条件变为真。 ($a < $b)为true。
    >= 检查左操作数的值是否大于或等于右操作数的值。如果是,则条件变为真。 ($a > = $b)为false。
    <= 检查左操作数的值是否小于或等于右操作数的值。如果是,则条件变为真。 ($a <= $b)为true。
    范例
    
    $a = 21;
    $b = 10;
    
    print "Value of \$a = $a and value of \$b = $b\n";
    
    if( $a == $b ) {
       print "$a == \$b is true\n";
    } else {
       print "\$a == \$b is not true\n";
    }
    
    if( $a != $b ) {
       print "\$a != \$b is true\n";
    } else {
       print "\$a != \$b is not true\n";
    }
    
    $c = $a <=> $b;
    print "\$a <=> \$b returns $c\n";
    
    if( $a > $b ) {
       print "\$a > \$b is true\n";
    } else {
       print "\$a > \$b is not true\n";
    }
    
    if( $a >= $b ) {
       print "\$a >= \$b is true\n";
    } else {
       print "\$a >= \$b is not true\n";
    }
    
    if( $a < $b ) {
       print "\$a < \$b is true\n";
    } else {
       print "\$a < \$b is not true\n";
    }
    
    if( $a <= $b ) {
       print "\$a <= \$b is true\n";
    } else {
       print "\$a <= \$b is not true\n";
    }
    
    
    尝试一下
    字符串比较运算符,假设变量$a持有“abc”,变量$b持有“xyz”,那么让我们检查下面的字符串相等运算符−
    操作符 描述 例子
    lt 如果left参数在字符串上小于right参数,则返回true。 ($a lt $b) 为 true.
    gt 如果left参数在字符串上大于right参数,则返回true。 ($a gt $b) 为 false.
    le 如果left参数在字符串上小于或等于right参数,则返回true。 ($a le $b) 为 true.
    ge 如果left参数在字符串上大于或等于right参数,则返回true。 ($a ge $b) 为 false.
    eq 如果left参数在字符串上等于right参数,则返回true。 ($a eq $b) 为 false.
    ne 如果left参数沿字符串方向不等于right参数,则返回true。 ($a ne $b) 为 true.
    cmp 返回-1、0或1,具体取决于左参数是按字符串方式小于,等于还是大于右参数。 ($a cmp $b) 为 -1.
    范例
    
    $a = "abc";
    $b = "xyz";
    
    print "Value of \$a = $a and value of \$b = $b\n";
    
    if( $a lt $b ) {
       print "$a lt \$b is true\n";
    } else {
       print "\$a lt \$b is not true\n";
    }
    
    if( $a gt $b ) {
       print "\$a gt \$b is true\n";
    } else {
       print "\$a gt \$b is not true\n";
    }
    
    if( $a le $b ) {
       print "\$a le \$b is true\n";
    } else {
       print "\$a le \$b is not true\n";
    }
    
    if( $a ge $b ) {
       print "\$a ge \$b is true\n";
    } else {
       print "\$a ge \$b is not true\n";
    }
    
    if( $a ne $b ) {
       print "\$a ne \$b is true\n";
    } else {
       print "\$a ne \$b is not true\n";
    }
    
    $c = $a cmp $b;
    print "\$a cmp \$b returns $c\n";
    
    
    尝试一下
  • 赋值运算符

    假设变量$a持有10,变量$b持有20,那么下面是Perl中可用的赋值运算符及其用法-
    操作符 描述 例子
    = 简单的赋值运算符。将值从右侧操作数分配给左侧操作数 $c = $a+ $b将$a + $b的值赋给$c
    + = 加和赋值运算符。它将右操作数添加到左操作数,并将结果分配给左操作数。 $c + = $a等于$c = $c + $a
    -= 减和赋值运算符。它从左侧操作数中减去右侧操作数,并将结果分配给左侧操作数。 $c-= $a等效于$c = $c-$a
    * = 乘以和赋值运算符。它将右操作数与左操作数相乘,并将结果分配给左操作数。 $c * = $a等效于$c = $c * $a
    / = 除和赋值运算符。它将左操作数除以右操作数,并将结果分配给左操作数。 $c / = $a等于$c = $c / $a
    %= 模和赋值运算符。它使用两个操作数取模,然后将结果分配给左操作数。 $c%= $a等于$c = $c%$a
    **= 指数和赋值运算符,对运算符执行指数(幂)计算并将值赋给左操作数 c **= $ a等效于$c = $c** $a
    范例
    
    $a = 10;
    $b = 20;
    
    print "Value of \$a = $a and value of \$b = $b\n";
    
    $c = $a + $b;
    print "After assignment value of \$c = $c\n";
    
    $c += $a;
    print "Value of \$c = $c after statement \$c += \$a\n";
    
    $c -= $a;
    print "Value of \$c = $c after statement \$c -= \$a\n";
    
    $c *= $a;
    print "Value of \$c = $c after statement \$c *= \$a\n";
    
    $c /= $a;
    print "Value of \$c = $c after statement \$c /= \$a\n";
    
    $c %= $a;
    print "Value of \$c = $c after statement \$c %= \$a\n";
    
    $c = 2;
    $a = 4;
    print "Value of \$a = $a and value of \$c = $c\n";
    $c **= $a;
    print "Value of \$c = $c after statement \$c **= \$a\n";
    
    
    尝试一下
  • 按位运算符

    按位运算符对位进行运算并执行逐位操作。&,|和^的真值表如下-
    p q p & q p | q p ^ q
    0 0 0 0 0
    0 1 0 1 1
    1 1 1 1 0
    1 0 0 1 1
    假设$a = 60和$b = 13为二进制格式,它们将如下所示-
    
     $a = 0011 1100
    
    $b = 0000 1101
    
    -----------------
    
    $a&$b = 0000 1100
    
    $a | $b = 0011 1101
    
    $a ^ $b = 0011 0001
    
    〜$a = 1100 0011 
     
    
    下表列出了$c支持的按位运算符。假设变量'$a'为60,变量'$b'为13,然后-
    操作符 描述 例子
    & 如果两个操作数中都存在二进制$aND运算符,则会将一位复制到结果中。 ($a&$b)= 12,即0000 1100
    | 如果任一操作数中存在二进制或运算符,则会对其进行复制。 ($a | $b)= 61,即0011 1101
    ^ 如果在一个操作数中设置了该位,但不是在两个操作数中都设置了位,则二进制XOR运算符将复制该位。 ($a ^ $b)= 49,即0011 0001
    ~ 二进制补码运算符是一元的,具有“翻转”位的作用。 (〜$a)=〜(60),即 -0111101
    << 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 $a << 2 = 240,即1111 0000
    >> 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 $a >> 2 = 15,即0000 1111
    范例
    
    use integer;
     
    $a = 60;
    $b = 13;
    
    print "Value of \$a = $a and value of \$b = $b\n";
    
    $c = $a & $b;
    print "Value of \$a & \$b = $c\n";
    
    $c = $a | $b;
    print "Value of \$a | \$b = $c\n";
    
    $c = $a ^ $b;
    print "Value of \$a ^ \$b = $c\n";
    
    $c = ~$a;
    print "Value of ~\$a = $c\n";
    
    $c = $a << 2;
    print "Value of \$a << 2 = $c\n";
    
    $c = $a >> 2;
    print "Value of \$a >> 2 = $c\n";
    
    
    尝试一下
  • 逻辑运算符

    下表显示了$c语言支持的所有逻辑运算符。假设变量$a持有true,变量$b持有false,那么-
    操作符 描述 例子
    and 称为逻辑AND运算符。如果两个操作数都为真,则条件为真。 ($a and $b)为false。
    && 称为逻辑与运算符。如果两个操作数都不为零,则条件变为true。 ($a && $b)为false。
    or 称为逻辑或运算符。如果两个操作数中的任何一个都不为零,则条件为真。 ($a or $b)为true。
    || 称为逻辑或运算符。如果两个操作数中的任何一个都不为零,则条件变为true。 ($a || $b)为true。
    not 称为逻辑非运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑非运算符将为假。 !($a && $b)为false。
    范例
    
    $a = true;
    $b = false;
    
    print "Value of \$a = $a and value of \$b = $b\n";
    
    $c = ($a and $b);
    print "Value of \$a and \$b = $c\n";
    
    $c = ($a  && $b);
    print "Value of \$a && \$b = $c\n";
    
    $c = ($a or $b);
    print "Value of \$a or \$b = $c\n";
    
    $c = ($a || $b);
    print "Value of \$a || \$b = $c\n";
    
    $a = 0;
    $c = not($a);
    print "Value of not(\$a)= $c\n";
    
    
    尝试一下
  • 类引用运算符

    Perl语言支持以下类似Quote的运算符。在下表中,{}代表您选择的任何一对定界符。-
    操作符 描述 例子
    q {} 用单引号将字符串引起来 q {abcd} 得 'abcd'
    qq {} 用双引号将字符串引起来 qq {abcd} 得 "abcd"
    qx {} 用反引号引起来的字符串 qx {abcd} 得 `abcd`
    范例
    
    $a = 10;
     
    $b = q{a = $a};
    print "Value of q{a = \$a} = $b\n";
    
    $b = qq{a = $a};
    print "Value of qq{a = \$a} = $b\n";
    
    # unix command execution
    $t = qx{date};
    print "Value of qx{date} = $t\n";
    
    
    尝试一下
  • 杂项运算符

    Perl语言支持以下杂类运算符。假设变量$a持有10而变量b持有20然后-
    操作符 描述 例子
    . 二进制运算符点(.)连接两个字符串 如果$a=“abc”,$b =“def”,则$a.$b将 得到 “abcdef”
    x 重复运算符x返回由左操作数组成的字符串,该字符串重复了右操作数指定的次数。 ('-' x 3)将得到 ---。
    .. 范围运算符..返回从左值到右值计数(逐个递增)的值列表 (2..5)将得到(2,3,4,5)
    ++ 自动增量运算符将整数值增加一 $a++将给出11
    -- 自动减量运算符将整数值减一 $a--将给出9
    -> 箭头运算符主要用于从对象或类名中解引用方法或变量 $obj->$a是从对象$obj访问变量$a的示例。
    范例
    
    $a = "abc";
    $b = "def";
    
    print "Value of \$a  = $a and value of \$b = $b\n";
     
    $c = $a . $b;
    print "Value of \$a . \$b = $c\n";
    
    $c = "-" x 3;
    print "Value of \"-\" x 3 = $c\n";
    
    @c = (2..5);
    print "Value of (2..5) = @c\n";
    
    $a = 10;
    $b = 15;
    print "Value of \$a  = $a and value of \$b = $b\n";
    
    $a++;
    $c = $a ;
    print "Value of \$a after \$a++ = $c\n";
    
    $b--;
    $c = $b ;
    print "Value of \$b after \$b-- = $c\n";
    
    
    尝试一下
  • 运算符优先级

    下表列出了从最高优先级到最低优先级的所有运算符。
     
    left    terms and list operators (leftward)
    left    ->
    nonassoc        ++ --
    right   **
    right   ! ~ \ and unary + and -
    left    =~ !~
    left    * / % x
    left    + - .
    left    << >>
    nonassoc        named unary operators
    nonassoc        < > <= >= lt gt le ge
    nonassoc        == != <=> eq ne cmp ~~
    left    &
    left    | ^
    left    &&
    left    || //
    nonassoc        ..  ...
    right   ?:
    right   = += -= *= etc.
    left    , =>
    nonassoc        list operators (rightward)
    right   not
    left    and
    left    or xor
    
    
    范例
    
    $a = 20;
    $b = 10;
    $c = 15;
    $d = 5;
    $e;
    
    print "Value of \$a  = $a, \$b = $b, \$c = $c and \$d = $d\n";
     
    $e = ($a + $b) * $c / $d;
    print "Value of (\$a + \$b) * \$c / \$d is  = $e\n";
    
    $e = (($a + $b) * $c )/ $d;
    print "Value of ((\$a + \$b) * \$c) / \$d is  = $e\n";
    
    $e = ($a + $b) * ($c / $d);
    print "Value of (\$a + \$b) * (\$c / \$d ) is  = $e\n";
    
    $e = $a + ($b * $c ) / $d;
    print "Value of \$a + (\$b * \$c )/ \$d is  = $e\n";
    
    
    尝试一下