Вы можете сделать это с помощью регулярного выражения вместо разделения:
my $str = " 1 sgp-1.valve.net (103.28.54.1) 1.030 ms 1.040 ms 1.212 ms";
my ($delaya, $delayb, $delayc) =
($str =~ /([0-9.]+)\s+ms\s+([0-9.]+)\s+ms\s+([0-9.]+)\s+ms/);
print join "\n", $delaya, $delayb, $delayc, "\n";
Выход:
1.030
1.040
1.212
Распределение регулярных выражений (приведенное ниже выражение повторяется 3 раза):
( # beginning of a capturing group
[0-9.]+ # a sequence of numbers and dot (at least one character)
) # end of a capturing group
\s+ # at least one space
ms # string 'ms'
Если вы хотите получить среднее значение, тогда:
my $str = " 1 sgp-1.valve.net (103.28.54.1) 1.030 ms 1.040 ms 1.212 ms";
my @delays = ($str =~ /([0-9.]+)\s+ms\s+([0-9.]+)\s+ms\s+([0-9.]+)\s+ms/);
my $total;
$total += $_ for @delays;
my $avg = $total/@delays;
print $avg, "\n";
Выход:
1.094