在 Perl 中,如果我分割一个包含换行符的字符串,如下所示;
@fields = split /\n/, "\n\n\n";
Run Code Online (Sandbox Code Playgroud)
@fields 为空。
更多示例:
@fields = split /\n/, "A\nB\nC"; # 3 items ("A","B","C") as expected
@fields = split /\n/, "A\n\nC"; # 3 items ("A","","C") as expected
@fields = split /\n/, "A\nB\n"; # 2 items ("A","B" ) NOT as expected
@fields = split /\n/, "\nB\nC"; # 3 items ("","B","C") as expected
@fields = split /\n/, "A\n\n"; # 1 items ("A") NOT as expected
Run Code Online (Sandbox Code Playgroud)
它的行为就像尾随换行符被忽略一样。
如果我的字符串包含 3 个换行符,并且我在换行符上进行拆分,为什么我的数组不总是包含 3 个项目?
我有办法做到这一点吗?
顺便说一句,我在所有版本的 Perl 上都得到了相同的结果(5.34.0、5.30.3、5.22.1 和 5.18.2)
perlfuncsplit下记录了如果省略参数,则返回列表中会LIMIT省略尾随空白部分:
如果省略 LIMIT(或者等效地为零),则通常将其视为负数,但尾随空字段将被删除(空前导字段始终保留);如果所有字段均为空,则所有字段都被视为尾随(因此在这种情况下被删除)。
要包含它们,请包含一个LIMIT参数,如果您不想限制返回字符串的数量,则该参数可以是 -1。
尝试:
@fields = split /\n/, "A\nB\n", -1;
Run Code Online (Sandbox Code Playgroud)