当 $STRING 以“\t\t”结尾时,如何让 split(/\t/, $STRING) 检测空值?

How can I make split(/\t/, $STRING) detect empty values when $STRING ends with "\t\t"?

$STRING"\t\t" 结尾时,如何让 split(/\t/, $STRING) 检测到空项?

我尝试使用 Perl 脚本拆分字符串作为项目之间的分隔符,然后计算并使用这些项目。但是,当字符串以组合 s 结尾时,脚本不计算空项。

示例:

string="value1\tvalue2\t\t\t\t"(值 1、值 2 和 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 splitsplit 的参数是 PATTERN, EXPR, LIMIT。在您当前的情况下,"LIMIT is omitted so "尾随的空字段被删除。"

通过为 LIMIT 添加 -1 值:

If LIMIT is negative, it is treated as if it were instead arbitrarily large; as many fields as possible are produced.

因此,否定的最终参数会阻止 split 丢弃尾随字段。