perl - 如何从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
解决方案
几个问题:
- 您正在使用绑定运算符
=~
而不是赋值运算符=
- 你应该总是
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
推荐阅读
- parsing - ANTLR 语法也可以识别数字键和整数
- jquery - jQuery特定位置检测滚动事件问题
- php - 代码保持打印相同的单词两次
- oracle11g - 在 oracle 中执行函数时跳过参数
- amazon-web-services - GCP 中 AWS 安全组的替代方案?
- bluetooth - bluetoothAdapter.startDiscovery() 总是返回 False
- paypal - PayPal 智能按钮是否需要意图?
- sql - VB SQL DELETE 语句不起作用 - 完全没有错误
- excel - 如何在谷歌表格上的 2 个符号之间提取一个数字
- flutter - Android 资源链接失败 Flutter