1. 使用s///替换操作符
# 删除左右所有空白字符(包括空格、制表符、换行等)
$string =~ s/^\s+|\s+$//g;
# 或者分开处理(更清晰)
$string =~ s/^\s+//; # 删除前导空白
$string =~ s/\s+$//; # 删除尾部空白
2. 使用trim函数(需安装String::Util模块)
use String::Util qw(trim);
my $string = " hello world \n";
my $trimmed = trim($string);
3. 自定义trim函数
# 基础版本
sub trim {
my $s = shift;
$s =~ s/^\s+|\s+$//g;
return $s;
}
# 原地修改版本
sub trim_inplace {
$_[0] =~ s/^\s+|\s+$//g;
}
# 使用
my $text = " example ";
$text = trim($text);
# 或者
trim_inplace($text);
4. 更精确的空白处理
# 只删除空格(不包括其他空白字符)
$string =~ s/^ +| +$//g;
# 删除所有Unicode空白字符(包括中文空格等)
$string =~ s/^\p{Space}+|\p{Space}+$//g;
5. 批量处理数组中的字符串
# 处理数组中的所有元素
my @strings = (" foo ", "bar ", " baz");
s/^\s+|\s+$//g for @strings;
# 使用map
@strings = map { s/^\s+|\s+$//g; $_ } @strings;
6. 删除特定类型的空白
# 只删除空格和制表符
$string =~ s/^[ \t]+|[ \t]+$//g;
# 删除换行符(通常在读文件时有用)
$string =~ s/^\n+|\n+$//g;
chomp($string); # 只删除末尾换行符
7. 完整示例
#!/usr/bin/perl
use strict;
use warnings;
# 测试数据
my @test_strings = (
" leading and trailing ",
"\t\tindented line\n",
"no spaces",
" multiple spaces ",
"\n\nnewlines\n\n",
);
print "原始字符串:\n";
foreach my $str (@test_strings) {
printf "[%s]\n", $str;
}
print "\n修剪后:\n";
foreach my $str (@test_strings) {
my $trimmed = $str;
$trimmed =~ s/^\s+|\s+$//g;
printf "[%s]\n", $trimmed;
}
8. 性能考虑
对于大量字符串处理,以下方式可能更高效:
# 使用预编译的正则表达式
my $trim_re = qr/^\s+|\s+$/;
# 批量处理
for my $string (@strings) {
$string =~ s/$trim_re//g;
}
推荐做法
简单需求:使用
s/^\s+|\s+$//g足够了
代码可读性:建议创建
trim()函数
项目中使用:考虑使用
String::Util模块(需先安装)
特殊需求:根据需要调整正则表达式以匹配特定的空白字符
安装String::Util模块
如果选择使用第三方模块:
# 使用CPAN
cpan String::Util
# 使用cpanm
cpanm String::Util
选择哪种方法取决于你的具体需求、性能考虑以及代码维护的便利性。