赋值运算符 #

一、基本赋值 #

1.1 标量赋值 #

perl
my $name = "Perl";
my $version = 5.36;
my $pi = 3.14159;

1.2 多重赋值 #

perl
my ($a, $b, $c) = (1, 2, 3);
my ($first, @rest) = (1, 2, 3, 4, 5);

1.3 数组赋值 #

perl
my @arr = (1, 2, 3, 4, 5);
my @copy = @arr;

1.4 哈希赋值 #

perl
my %person = (
    name => "Tom",
    age  => 25,
);

二、复合赋值运算符 #

2.1 算术复合赋值 #

运算符 等价于 示例
+= $a = $a + $b $a += 5
-= $a = $a - $b $a -= 3
*= $a = $a * $b $a *= 2
/= $a = $a / $b $a /= 4
%= $a = $a % $b $a %= 3
**= $a = $a ** $b $a **= 2
perl
my $a = 10;

$a += 5;
print "a = $a\n";

$a -= 3;
print "a = $a\n";

$a *= 2;
print "a = $a\n";

$a /= 7;
print "a = $a\n";

$a %= 5;
print "a = $a\n";

2.2 字符串复合赋值 #

运算符 等价于 示例
.= $a = $a . $b $a .= " World"
x= $a = $a x $b $a x= 3
perl
my $str = "Hello";

$str .= ", ";
$str .= "World";
$str .= "!";
print "$str\n";

my $line = "-";
$line x= 20;
print "$line\n";

2.3 逻辑复合赋值 #

perl
my $a = 1;
$a &&= 0;

my $b = 0;
$b ||= 1;

my $c;
$c //= "default";

三、赋值与返回值 #

3.1 赋值表达式的值 #

赋值表达式返回赋值后的值:

perl
my $a = 5;
my $b = ($a = 10);
print "a = $a, b = $b\n";

3.2 连续赋值 #

perl
my ($a, $b, $c);
$a = $b = $c = 0;
print "a=$a, b=$b, c=$c\n";

3.3 条件赋值 #

perl
my $condition = 1;
my $value;

$value = $condition ? "yes" : "no";
print $value;

四、列表赋值 #

4.1 数组解构 #

perl
my @arr = (1, 2, 3, 4, 5);
my ($first, $second, @rest) = @arr;

print "first: $first\n";
print "second: $second\n";
print "rest: @rest\n";

4.2 交换值 #

perl
my ($a, $b) = (1, 2);
print "Before: a=$a, b=$b\n";

($a, $b) = ($b, $a);
print "After: a=$a, b=$b\n";

4.3 哈希切片赋值 #

perl
my %person;
@person{qw(name age city)} = ("Tom", 25, "Beijing");

print "name: $person{name}\n";
print "age: $person{age}\n";
print "city: $person{city}\n";

五、特殊赋值 #

5.1 my同时赋值 #

perl
my $a = 1;
my ($b, $c) = (2, 3);
my @arr = (1, 2, 3);
my %hash = (a => 1, b => 2);

5.2 local #

临时修改变量值:

perl
my $global = "original";

{
    local $global = "temporary";
    print "Inside: $global\n";
}

print "Outside: $global\n";

5.3 our #

声明包变量:

perl
our $PACKAGE_VAR = "global";

sub show_var {
    print $PACKAGE_VAR;
}

5.4 state #

持久化变量(Perl 5.10+):

perl
use v5.10;

sub counter {
    state $count = 0;
    return ++$count;
}

print counter();
print counter();
print counter();

六、实用示例 #

6.1 累加器 #

perl
my $total = 0;
my @numbers = (1, 2, 3, 4, 5);

$total += $_ foreach @numbers;
print "Total: $total\n";

6.2 字符串构建 #

perl
my $html = "";

$html .= "<html>\n";
$html .= "  <head><title>Test</title></head>\n";
$html .= "  <body>Hello</body>\n";
$html .= "</html>\n";

print $html;

6.3 默认值设置 #

perl
my %config;

$config{host} //= "localhost";
$config{port} //= 3306;
$config{user} //= "root";
$config{debug} //= 0;

print "host: $config{host}\n";
print "port: $config{port}\n";

6.4 条件更新 #

perl
my $value = 0;

$value ||= 10;
print "value: $value\n";

$value ||= 20;
print "value: $value\n";

$value &&= 100;
print "value: $value\n";

七、实践练习 #

练习1:统计计算 #

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

my @scores = (85, 92, 78, 90, 88);

my ($total, $count, $max, $min) = (0, 0, $scores[0], $scores[0]);

foreach my $score (@scores) {
    $total += $score;
    $count += 1;
    $max = $score if $score > $max;
    $min = $score if $score < $min;
}

my $avg = $total / $count;

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

练习2:字符串处理 #

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

my @words = qw(Hello Perl World);
my $sentence = "";

$sentence .= $_ . " " foreach @words;
$sentence =~ s/\s+$//;

say "Sentence: $sentence";

my $border = "=" x length($sentence);
say $border;
say $sentence;
say $border;

练习3:配置合并 #

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

my %defaults = (
    host  => "localhost",
    port  => 3306,
    user  => "root",
    debug => 0,
);

my %user_config = (
    host => "192.168.1.100",
    port => 3307,
);

my %config = (%defaults, %user_config);

say "Final config:";
say "  host: $config{host}";
say "  port: $config{port}";
say "  user: $config{user}";
say "  debug: $config{debug}";

八、总结 #

本章学习了:

  • 基本赋值运算符
  • 复合赋值运算符
  • 赋值表达式的返回值
  • 列表赋值
  • my、local、our、state

下一章将学习控制流。

最后更新:2026-03-27