这是我的perl 5.16代码
while(<>) {
chomp;
@data = split /a/, $_;
print(join("b",@data),"n");
}
如果我输入一个包含以下内容的文件:
paaaa
paaaaq
我得到
p
pbbbbq
但我期待
pbbbb
pbbbbq
为什么我期望后一种行为是错误的?
有文献记载,除非指定第三个非零参数,否则会删除尾随的空值。
如果
LIMIT
被省略(或者,等价地,为零),那么它通常被视为负,但后面的空字段被剥离(总是保留空的前导字段)除外
你想要
split /a/, $_, -1;
查看拆分perldoc:中的LIMIT参数
http://perldoc.perl.org/functions/split.html
相关章节为:
如果LIMIT为负,则将其视为任意大;产生尽可能多的场。
如果LIMIT被省略(或者,等价地,为零),那么它通常被视为负,但后面的空字段被剥离(总是保留空的前导字段)除外;如果所有字段都是空的,那么所有字段都被认为是尾随的(因此在这种情况下被剥离)。
因此,要获得您期望的行为,请尝试:
while(<>) {
chomp;
@data = split /a/, $_, -1;
print(join("b",@data),"n");
}
因为在拆分paaaa之后,您得到了一个数组@data,其中只有一个元素p。也许换人更好:
while(<>) {
chomp;
$_=~s/a/b/g;
print($_,"n");
}