Perlmonks为同事重新发布:
我编写了一个perl脚本来分隔由分号分隔的长电子邮件列表.我想用代码做的是将分割与白色空间的修剪相结合,所以我不需要两个数组.加载第一个数组时是否需要修剪.输出是一个排序的名称列表.谢谢.
#!/pw/prod/svr4/bin/perl
use warnings;
use strict;
my $file_data =
'Builder, Bob ;Stein, Franklin MSW; Boop, Elizabeth PHD Cc: Bear,
+ Izzy';
my @email_list;
$file_data =~ s/CC:/;/ig;
$file_data =~ s/PHD//ig;
$file_data =~ s/MSW//ig;
my @tmp_data = split( /;/, $file_data );
foreach my $entry (@tmp_data) {
$entry =~ s/^[ \t]+|[ \t]+$//g;
push( @email_list, $entry );
}
foreach my $name ( sort(@email_list) ) {
print "$name \n";
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*ung 11
如果你不需要修剪第一个和最后一个元素,这将有所帮助:
@email_list = split /\s*;\s*/, $file_data;
Run Code Online (Sandbox Code Playgroud)
如果你确实需要修剪第一个和最后一个元素,$file_data先修剪,然后重复如上.:-P
Eth*_*her 11
您不必使用相同的功能一次完成两个操作.有时单独执行操作可能更清楚.也就是说,首先拆分,然后从每个元素中删除空格(然后对结果进行排序):
@email_list =
sort(
map {
s/\s*(\S+)\s*/\1/; $_
}
split ';', $file_data
);
Run Code Online (Sandbox Code Playgroud)
编辑:同时剥离一个字符串的一个以上可能会导致陷阱,例如Sinan关于在"Elizabeth"部分留下尾随空格的点.我编写了该代码片段,假设名称不会有内部空格,这实际上是非常错误的,如果我有意识地注意到它,它会突出显示不正确.代码在下面得到了很大改进(也更具可读性):
@email_list =
sort(
map {
s/^\s+//; # strip leading spaces
s/\s+$//; # strip trailing spaces
$_ # return the modified string
}
split ';', $file_data
);
Run Code Online (Sandbox Code Playgroud)