当 $STRING
以 "\t\t"结尾时,如何使
?split(/\t/, $STRING)
检测空项目
使用 Perl 脚本,我尝试将字符串拆分为项目之间的分隔符,然后计算并使用这些项目。但是,当字符串以组合 s 结尾时,脚本不计算空项。
例子:
string="value1\tvalue2\t\t\t\t"
(value1、value2和4个空项)
但它计算 2 个项目(value1,value2):
$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
最佳答案
通过添加 -1
作为参数来更改 split
行:
my @F = split(/\t/, $STRING, -1);
输出:
value1 value2
6
Done
根据 perldoc split
,split
的参数是PATTERN, EXPR, LIMIT
。在您当前的情况下,“LIMIT 被省略,因此”尾随空字段被剥离。”
通过为 LIMIT
添加 -1
值:
If LIMIT is negative, it is treated as if it were instead arbitrarily large; as many fields as possible are produced.
所以一个否定的最终参数会阻止 split
丢弃尾随字段。
关于string - 当 $STRING 以 "\t\t"结尾时,如何让 split(/\t/, $STRING) 检测空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57399593/