如何检测我在Perl中处理哪一行?

Cim*_*ity 0 regex perl

有一个文本文件,看起来像:

    200.0     250.0     300.0     350.0     400.0  
162:02:10 017:01:56 017:08:18 011:16:22 008:40:18
    580.0     600.0     620.0     640.0     660.0   
004:04:01 001:47:27 007:25:29 017:44:53 003:07:34
Run Code Online (Sandbox Code Playgroud)

尝试将第1行和第3行解析为"值",将第2行和第4行解析为"时间".

我的代码:

if($line =~ /^\d[^:]*\d/){
     my @values = split(/\s/,$line);
        }
elsif($line =~/^\d+:\d+:\d+/){
     my @time = split(/\s/,$line);
}
Run Code Online (Sandbox Code Playgroud)

问题:始终匹配第一个正则表达式.我对正则表达式#1的理解是,它将匹配以数字开头的行,后跟任何次数不是':'的值,后跟另一个数字.

Igo*_*Oks 6

这是因为第2行和第4行确实包含第一个正则表达式的模式.

也许你可以简单地检查,一条线是否有冒号,这就足够了吗?像这样:

my @time;
my @values;
if($line =~ /:/){
     @time = split(/\s+/,$line);
}
else{
     @values = split(/\s+/,$line);
}
Run Code Online (Sandbox Code Playgroud)