这是我的perl 5.16代码
while(<>) {
chomp;
@data = split /a/, $_;
print(join("b",@data),"\n");
}
如果我在其中输入一个文件:
paaaa
paaaaq
我得到了
p
pbbbbq
但我期待
pbbbb
pbbbbq
为什么我不期待后一种行为?
答案 0 :(得分:7)
除非您指定第三个非零参数,否则将删除尾随空格documented。
如果
LIMIT
被省略(或等效地为零),那么它通常被视为相反为负,但除了尾随空字段被剥离(空白前导字段始终保留)
你想要
split /a/, $_, -1;
答案 1 :(得分:7)
查看split perldoc中的LIMIT参数:
http://perldoc.perl.org/functions/split.html
相关部分是:
如果LIMIT为负数,则将其视为任意大;尽可能多的领域。
如果省略LIMIT(或等效地为零),则通常将其视为负值,但除去尾随的空字段(始终保留空的前导字段);如果所有字段都为空,则认为所有字段都是尾随的(因此在这种情况下会被删除)。
为了获得您期望的行为,请尝试:
while(<>) {
chomp;
@data = split /a/, $_, -1;
print(join("b",@data),"\n");
}
答案 2 :(得分:3)
因为在拆分 paaaa 之后,你得到了一个数组 @data ,其中只有一个elemet p 。 也许替代更好:
while(<>) {
chomp;
$_=~s/a/b/g;
print($_,"\n");
}