我正在尝试从变量中提取时间戳部分,但是以某种方式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
答案 0 :(得分:2)
几个问题:
=~
而不是赋值运算符=
use strict
和use warnings
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
答案 1 :(得分:1)
两个问题:
=~
是绑定运算符,您可能需要常规分配。
substr $ts, 10
将子字符串形式的位置10返回到$ ts的末尾。要仅提取12个字符,请使用
$ts = substr $ts, 10, 12;
您还可以直接提取时间戳:
if(my ($ts) = /timestamp: [^_]+_(\S+)/){
print $ts, "\n";
}