当split(/\t/, $STRING)
以$STRING
结尾时,如何让"\t\t"
检测空项目?
使用Perl脚本,我试图根据项目之间的分隔符来分割字符串,然后计算并使用这些项目。但是,当字符串以s结尾时,脚本不会计算空项目。
示例:
string="value1\tvalue2\t\t\t\t"
(value1,value2和4个空项目)
但它包含2个项目(值1,值2):
$STRING="value1\tvalue2\t\t\t\t";
print $STRING."\n";
my @F = split(/\t/, $STRING);
print scalar(@F)."\n";
# The number of items must match the number of header name
if( scalar(@F) == 6 )
{
print "Done \n";
}
代码显示:
value1 value2
2
而预期的是:
value1 value2
6
答案 0 :(得分:9)
通过添加split
作为参数来更改-1
行:
my @F = split(/\t/, $STRING, -1);
输出:
value1 value2
6
Done
对于每个perldoc split
,split
的参数为PATTERN, EXPR, LIMIT
。在您当前的情况下,“省略了LIMIT,所以删除了“删除空白字段”。
通过为-1
添加LIMIT
值:
如果LIMIT为负,则将其视为任意大;产生尽可能多的字段。
因此,最后一个否定参数会阻止split
丢弃尾随字段。