【发布时间】:2020-03-06 17:31:18
【问题描述】:
我正在尝试解析 traceroute 字符串并获取服务器延迟。我已经设法做到了,但输出包括延迟和“毫秒”。我如何摆脱“毫秒”,是否可以平均三个延迟?
#!/usr/bin/perl
use strict;
use warnings;
my $str = " 1 sgp-1.valve.net (103.28.54.1) 1.030 ms 1.040 ms 1.212 ms";
my ($a, $b, $delaya, $delayb, $delayc) = split / /, $str;
print "$delaya\n";
print "$delayb\n";
print "$delayc\n";
返回:
1.030 ms
1.040 ms
1.212 ms
预期:
1.030
1.040
1.212
【问题讨论】:
-
我的方法对吗?
-
Net::Traceroute 可能有用。
-
split上的提示:' '(引号之间的单个空格)在任意数量的任何空格上拆分(并丢弃前导和尾随空格;请参阅文档)。然后,如果您的线路肯定始终采用相同的格式,您可以这样做并计算位置:my @delays = (split ' ', $str)[3,5,7];。坏处:依赖空格(或字段数)。所以也许正则表达式在这里更好。