赋值运算符 #
一、基本赋值 #
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