如何在if条件下从变量中提取值
How to extract a value from a variable within if condition
我正在尝试从变量中提取时间戳部分,但 substr 函数无法正常工作
这是我试过的
while(<INFILE>){
chomp;
if(/timestamp:(.+$)/){
$ts = ;
$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
两个问题:
=~
是绑定运算符,您可能需要正常赋值。
substr $ts, 10
returns 子字符串从位置 10 到 $ts 的末尾。要仅提取 12 个字符,请使用
$ts = substr $ts, 10, 12;
也可以直接提取时间戳:
if(my ($ts) = /timestamp: [^_]+_(\S+)/){
print $ts, "\n";
}
几个问题:
- 您正在使用绑定运算符
=~
而不是赋值运算符 =
- 你应该总是
use strict
和use warnings
- 你应该忽略匹配前的空格
- 如果行上有其他数据,
substr
也会return。您应该将 substr
的范围限定为只包含您想要的内容。
修改后的代码:
use strict;
use warnings;
while(<DATA>) {
chomp;
if (/timestamp:\s*(.+$)/) {
my $ts = substr(, 10, 12); # only include length of data you want
print $ts;
}
}
__DATA__
timestamp: 25JUN2019_02:55:02.234
输出:
02:55:02.234
我正在尝试从变量中提取时间戳部分,但 substr 函数无法正常工作
这是我试过的
while(<INFILE>){
chomp;
if(/timestamp:(.+$)/){
$ts = ;
$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
两个问题:
=~
是绑定运算符,您可能需要正常赋值。substr $ts, 10
returns 子字符串从位置 10 到 $ts 的末尾。要仅提取 12 个字符,请使用$ts = substr $ts, 10, 12;
也可以直接提取时间戳:
if(my ($ts) = /timestamp: [^_]+_(\S+)/){
print $ts, "\n";
}
几个问题:
- 您正在使用绑定运算符
=~
而不是赋值运算符=
- 你应该总是
use strict
和use warnings
- 你应该忽略匹配前的空格
- 如果行上有其他数据,
substr
也会return。您应该将substr
的范围限定为只包含您想要的内容。
修改后的代码:
use strict;
use warnings;
while(<DATA>) {
chomp;
if (/timestamp:\s*(.+$)/) {
my $ts = substr(, 10, 12); # only include length of data you want
print $ts;
}
}
__DATA__
timestamp: 25JUN2019_02:55:02.234
输出:
02:55:02.234