算术运算符 #

一、基本算术运算符 #

1.1 加法 + #

perl
my $a = 10;
my $b = 3;
my $sum = $a + $b;
print $sum;

1.2 减法 - #

perl
my $a = 10;
my $b = 3;
my $diff = $a - $b;
print $diff;

1.3 乘法 * #

perl
my $a = 10;
my $b = 3;
my $product = $a * $b;
print $product;

1.4 除法 / #

perl
my $a = 10;
my $b = 3;
my $quotient = $a / $b;
print $quotient;

整数除法:

perl
my $int_div = int(10 / 3);
print $int_div;

1.5 取余 % #

perl
my $a = 10;
my $b = 3;
my $remainder = $a % $b;
print $remainder;

1.6 幂运算 ** #

perl
my $a = 2;
my $b = 10;
my $power = $a ** $b;
print $power;

二、运算符优先级 #

算术运算符优先级(从高到低):

优先级 运算符 说明
1 ** 幂运算
2 * / % 乘、除、取余
3 + - 加、减

示例:

perl
my $result1 = 2 + 3 * 4;
my $result2 = (2 + 3) * 4;
my $result3 = 2 ** 3 ** 2;
my $result4 = (2 ** 3) ** 2;

三、自增自减 #

3.1 自增 ++ #

perl
my $a = 5;
$a++;
print $a;

my $b = 5;
my $c = $b++;
print "c = $c, b = $b\n";

my $d = 5;
my $e = ++$d;
print "e = $e, d = $d\n";

3.2 自减 – #

perl
my $a = 5;
$a--;
print $a;

my $b = 5;
my $c = $b--;
print "c = $c, b = $b\n";

my $d = 5;
my $e = --$d;
print "e = $e, d = $d\n";

3.3 前置与后置的区别 #

操作 说明
$a++ 先返回值,再自增
++$a 先自增,再返回值
$a– 先返回值,再自减
–$a 先自减,再返回值

四、数学函数 #

4.1 基本函数 #

perl
print abs(-10);
print int(3.7);
print int(-3.7);
print sqrt(16);

4.2 三角函数 #

perl
use POSIX;

print sin(0);
print cos(0);
print atan2(1, 1);

4.3 对数函数 #

perl
print log(10);
print exp(1);

4.4 随机数 #

perl
print rand();
print rand(100);
print int(rand(100));
srand(42);

五、进制转换 #

5.1 不同进制表示 #

perl
my $decimal = 42;
my $hex = 0x2A;
my $octal = 052;
my $binary = 0b101010;

print $decimal;
print $hex;
print $octal;
print $binary;

5.2 进制转换函数 #

perl
my $num = 42;

my $hex_str = sprintf("%x", $num);
my $oct_str = sprintf("%o", $num);
my $bin_str = sprintf("%b", $num);

print "Hex: $hex_str\n";
print "Octal: $oct_str\n";
print "Binary: $bin_str\n";

字符串转数字:

perl
my $hex = hex("2A");
my $oct = oct("52");
my $bin = oct("0b101010");

print $hex;
print $oct;
print $bin;

六、实用示例 #

6.1 四舍五入 #

perl
sub round {
    my $num = shift;
    return int($num + 0.5);
}

print round(3.4);
print round(3.5);
print round(3.6);

使用 POSIX 模块:

perl
use POSIX qw(round);

print round(3.4);
print round(3.5);

6.2 保留小数位 #

perl
my $num = 3.14159;
my $formatted = sprintf("%.2f", $num);
print $formatted;

6.3 范围检查 #

perl
my $value = 75;
my $min = 0;
my $max = 100;

my $clamped = $value < $min ? $min : ($value > $max ? $max : $value);
print $clamped;

七、实践练习 #

练习1:简单计算器 #

perl
#!/usr/bin/perl
use strict;
use warnings;
use v5.10;

my ($a, $op, $b) = (10, '+', 5);

my $result;
if    ($op eq '+') { $result = $a + $b; }
elsif ($op eq '-') { $result = $a - $b; }
elsif ($op eq '*') { $result = $a * $b; }
elsif ($op eq '/') { $result = $a / $b; }
elsif ($op eq '%') { $result = $a % $b; }
elsif ($op eq '**') { $result = $a ** $b; }

say "$a $op $b = $result";

练习2:数字统计 #

perl
#!/usr/bin/perl
use strict;
use warnings;
use v5.10;
use List::Util qw(sum max min);

my @numbers = (23, 45, 12, 67, 34, 89, 56);

my $total = sum @numbers;
my $count = scalar @numbers;
my $avg = $total / $count;

say "Numbers: @numbers";
say "Sum: $total";
say "Count: $count";
say "Average: " . sprintf("%.2f", $avg);
say "Max: " . max(@numbers);
say "Min: " . min(@numbers);

练习3:进制转换器 #

perl
#!/usr/bin/perl
use strict;
use warnings;
use v5.10;

my $num = 42;

printf "Decimal: %d\n", $num;
printf "Hex: 0x%X\n", $num;
printf "Octal: 0%o\n", $num;
printf "Binary: 0b%b\n", $num;

八、总结 #

本章学习了:

  • 基本算术运算符
  • 运算符优先级
  • 自增自减运算符
  • 数学函数
  • 进制转换

下一章将学习字符串运算符。

最后更新:2026-03-27