当结果包含空字符串时,perl中split的奇怪行为
这是我的perl 5.16代码当结果包含空字符串时,perl中split的奇怪行为,perl,split,Perl,Split,这是我的perl 5.16代码 while(<>) { chomp; @data = split /a/, $_; print(join("b",@data),"\n"); } 我明白了 但我期待着 pbbbb pbbbbq 为什么我认为后一种行为是错误的?除非指定第三个非零参数,否则后面的空格将被删除 如果省略了LIMIT(或等效为零),则通常将其视为负值,但尾部空字段被剥离(始终保留空前导字段) 你想要 split /a/, $_, -1; 查看split pe
while(<>) {
chomp;
@data = split /a/, $_;
print(join("b",@data),"\n");
}
我明白了
但我期待着
pbbbb
pbbbbq
为什么我认为后一种行为是错误的?除非指定第三个非零参数,否则后面的空格将被删除
如果省略了LIMIT
(或等效为零),则通常将其视为负值,但尾部空字段被剥离(始终保留空前导字段)
你想要
split /a/, $_, -1;
查看split perldoc中的LIMIT参数: 有关章节如下: 若极限为负值,则将其视为任意大;生产尽可能多的油田 如果省略了限制(或等效为零),则通常将其视为负值,但尾部空字段被剥离(始终保留空前导字段);如果所有字段都为空,则所有字段都被视为尾随字段(因此在本例中被剥离) 因此,要获得您期望的行为,请尝试:
while(<>) {
chomp;
@data = split /a/, $_, -1;
print(join("b",@data),"\n");
}
while(){
咀嚼;
@数据=split/a/,$\ 1;
打印(连接(“b”),@data),“\n”);
}
因为在拆分paaaa之后,您得到了一个数组@data,其中只有一个elemet p。
也许替换更好:
while(<>) {
chomp;
$_=~s/a/b/g;
print($_,"\n");
}
while(){
咀嚼;
美元=~s/a/b/g;
打印($);
}
@斯蒂芬蒙哥马利·史密斯:这是一份复杂的文档;唯一的理由是它几乎总是做你想做的事。
while(<>) {
chomp;
@data = split /a/, $_, -1;
print(join("b",@data),"\n");
}
while(<>) {
chomp;
$_=~s/a/b/g;
print($_,"\n");
}