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

ahm*_*100 3 string perl whitespace trailing

我怎样才能使split(/\t/, $STRING)检测空项目时,$STRING两端用"\t\t"

使用Perl脚本,我试图根据项目之间的分隔符来分割字符串,然后计算并使用这些项目。但是,当字符串以s结尾时,脚本不会计算空项目。

例:

string="value1\tvalue2\t\t\t\t" (值1,值2和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";
            }
Run Code Online (Sandbox Code Playgroud)

代码显示:

value1  value2      
2
Run Code Online (Sandbox Code Playgroud)

而预期的是:

value1  value2  
6
Run Code Online (Sandbox Code Playgroud)

cxw*_*cxw 9

split通过添加-1为参数来更改行:

my @F = split(/\t/, $STRING, -1);
Run Code Online (Sandbox Code Playgroud)

输出:

value1  value2              
6
Done 
Run Code Online (Sandbox Code Playgroud)

perldoc split时,参数split都是PATTERN, EXPR, LIMIT。在您当前的情况下,“省略了LIMIT,所以删除了“尾随空白字段”。

通过添加以下-1LIMIT

如果LIMIT为负,则将其视为任意大;产生尽可能多的字段。

因此,否定的最终论点可以防止split丢弃尾随字段。