字符串运算符 #
一、字符串连接 . #
1.1 基本连接 #
使用 . 连接字符串:
perl
my $str1 = "Hello";
my $str2 = "World";
my $result = $str1 . ", " . $str2 . "!";
print $result;
1.2 连接数字 #
数字会自动转换为字符串:
perl
my $name = "Perl";
my $version = 5.36;
my $full = $name . " v" . $version;
print $full;
1.3 多次连接 #
perl
my $str = "a" . "b" . "c" . "d";
print $str;
二、字符串重复 x #
2.1 基本重复 #
使用 x 重复字符串:
perl
my $line = "-" x 20;
print $line . "\n";
my $dots = "." x 3;
print $dots . "\n";
2.2 创建模式 #
perl
my $separator = "=" x 40;
my $border = "*" x 30;
my $indent = " " x 4;
print $separator . "\n";
print $indent . "Hello\n";
print $border . "\n";
2.3 列表重复 #
perl
my @arr = (1) x 5;
print "@arr\n";
my @zeros = (0) x 10;
print "@zeros\n";
三、字符串插值 #
3.1 双引号插值 #
perl
my $name = "Perl";
my $greeting = "Hello, $name!";
print $greeting . "\n";
3.2 复杂变量插值 #
perl
my @items = ("apple", "banana");
my $list = "Items: @items";
print $list . "\n";
my %person = (name => "Tom");
my $info = "Name: $person{name}";
print $info . "\n";
3.3 花括号分隔 #
perl
my $name = "Perl";
my $str1 = "${name}script";
my $str2 = "${name}5";
print "$str1, $str2\n";
3.4 避免插值 #
perl
my $name = "Perl";
my $str1 = '$name';
my $str2 = "\$name";
print "$str1, $str2\n";
四、字符串函数 #
4.1 长度 #
perl
my $str = "Hello, World!";
my $len = length($str);
print "Length: $len\n";
4.2 子串 #
perl
my $str = "Hello, World!";
my $sub1 = substr($str, 0, 5);
my $sub2 = substr($str, 7);
my $sub3 = substr($str, -6, 5);
print "$sub1\n";
print "$sub2\n";
print "$sub3\n";
修改子串:
perl
my $str = "Hello, World!";
substr($str, 7, 5) = "Perl";
print "$str\n";
4.3 查找 #
perl
my $str = "Hello, World!";
my $pos1 = index($str, "o");
my $pos2 = index($str, "o", 5);
my $pos3 = rindex($str, "o");
print "First 'o': $pos1\n";
print "Second 'o': $pos2\n";
print "Last 'o': $pos3\n";
4.4 大小写转换 #
perl
my $str = "Hello, World!";
my $upper = uc($str);
my $lower = lc($str);
my $first_upper = ucfirst($str);
my $first_lower = lcfirst($str);
print "$upper\n";
print "$lower\n";
print "$first_upper\n";
print "$first_lower\n";
4.5 去除空白 #
perl
my $str = " Hello, World! ";
$str =~ s/^\s+//;
$str =~ s/\s+$//;
$str =~ s/^\s+|\s+$//g;
4.6 分割与连接 #
perl
my $str = "apple,banana,cherry";
my @arr = split /,/, $str;
print "@arr\n";
my $joined = join "-", @arr;
print "$joined\n";
五、字符串格式化 #
5.1 sprintf #
perl
my $name = "Perl";
my $version = 5.36;
my $str = sprintf("%s v%.2f", $name, $version);
print "$str\n";
5.2 格式说明符 #
| 说明符 | 说明 |
|---|---|
| %s | 字符串 |
| %d | 整数 |
| %f | 浮点数 |
| %x | 十六进制 |
| %o | 八进制 |
| %b | 二进制 |
| %% | 百分号 |
perl
my $num = 42;
printf "Decimal: %d\n", $num;
printf "Hex: 0x%x\n", $num;
printf "Float: %.2f\n", $num;
printf "Padded: %05d\n", $num;
printf "Left: %-10s|\n", "Hello";
printf "Right: %10s|\n", "Hello";
六、Here文档 #
6.1 基本语法 #
perl
my $text = <<'END';
This is a multi-line
string that preserves
all formatting.
END
print $text;
6.2 插值Here文档 #
perl
my $name = "Perl";
my $text = <<"END";
Hello, $name!
Welcome to the world of programming.
END
print $text;
6.3 使用Here文档 #
perl
print <<"HTML";
<html>
<head><title>Test</title></head>
<body>
<h1>Hello</h1>
</body>
</html>
HTML
七、实用示例 #
7.1 字符串填充 #
perl
sub pad_left {
my ($str, $len, $char) = @_;
$char //= " ";
return $char x ($len - length($str)) . $str;
}
sub pad_right {
my ($str, $len, $char) = @_;
$char //= " ";
return $str . $char x ($len - length($str));
}
print pad_left("42", 5, "0") . "\n";
print pad_right("Hello", 10, ".") . "\n";
7.2 字符串截断 #
perl
sub truncate {
my ($str, $max_len, $suffix) = @_;
$suffix //= "...";
if (length($str) > $max_len) {
return substr($str, 0, $max_len - length($suffix)) . $suffix;
}
return $str;
}
print truncate("Hello, World!", 10) . "\n";
print truncate("Short", 10) . "\n";
八、实践练习 #
练习1:格式化输出 #
perl
#!/usr/bin/perl
use strict;
use warnings;
use v5.10;
my @data = (
{ name => "Alice", score => 95 },
{ name => "Bob", score => 87 },
{ name => "Charlie", score => 92 },
);
say "=" x 30;
say sprintf("%-10s | %s", "Name", "Score");
say "-" x 30;
foreach my $item (@data) {
say sprintf("%-10s | %3d", $item->{name}, $item->{score});
}
say "=" x 30;
练习2:字符串处理 #
perl
#!/usr/bin/perl
use strict;
use warnings;
use v5.10;
my $text = " Hello, Perl World! ";
my $trimmed = $text;
$trimmed =~ s/^\s+|\s+$//g;
my @words = split /\s+/, $trimmed;
my $word_count = scalar @words;
my $reversed = join " ", reverse @words;
say "Original: '$text'";
say "Trimmed: '$trimmed'";
say "Words: $word_count";
say "Reversed: '$reversed'";
练习3:模板替换 #
perl
#!/usr/bin/perl
use strict;
use warnings;
use v5.10;
my $template = "Hello, {name}! Your score is {score}.";
my %vars = (
name => "Tom",
score => 95,
);
my $result = $template;
$result =~ s/\{(\w+)\}/$vars{$1}/g;
say $result;
九、总结 #
本章学习了:
- 字符串连接运算符
. - 字符串重复运算符
x - 字符串插值
- 常用字符串函数
- 字符串格式化
- Here文档
下一章将学习比较运算符。
最后更新:2026-03-27