首页 > 解决方案 > 如何从if条件内的变量中提取值

问题描述

我正在尝试从变量中提取时间戳部分,但不知何故 substr 函数不起作用

这是我尝试过的

while(<INFILE>){
chomp;
if(/timestamp:(.+$)/){
                        $ts = $1;
                        $ts =~ substr($ts, 10);
print $ts;
}

close(INFILE);

这就是该行在文件中的样子

timestamp: 25JUN2019_02:55:02.234
somedata..
..
..
..

timestamp: 25JUN2019_07:00:28.718

我希望输出是

02:55:02.234
07:00:28.718

但相反的输出是

25JUN2019_02:55:02.234
25JUN2019_07:00:28.718

标签: perlsubstr

解决方案


几个问题:

  1. 您正在使用绑定运算符=~而不是赋值运算符=
  2. 你应该总是use strictuse warnings
  3. 您应该在比赛前忽略空格
  4. 如果该行有其他数据,substr也将返回它。您应该将您的范围限定substr为仅包括您想要的。

修改后的代码:

use strict;
use warnings;

while(<DATA>) {
  chomp;
  if (/timestamp:\s*(.+$)/) {
    my $ts = substr($1, 10, 12); # only include length of data you want
    print $ts;
  }
}

__DATA__
timestamp: 25JUN2019_02:55:02.234

输出:

02:55:02.234

推荐阅读