Не совсем уверен, что вы пытаетесь сделать, но следующее должно взять результаты из $p->ping
и поместить их в массив, а затем отобразить их отсортированные по хосту.
...
my @results;
foreach my $host (get_mirror_list()) {
my %ping_res = ( host => $host );
@ping_res{qw{ ret dur ip }} = $p->ping($host, 2);
push @results, \%ping_res;
}
foreach my $pr (sort { $$a{host} <=> $$b{host} } @results) {
if ($$pr{ret}) {
printf("%s:%.2f\n", $$pr{host}, 1000 * $$pr{dur});
}
}
...
Или,если хотите, поместите результаты в хеш:
...
my %results;
foreach my $host (get_mirror_list()) {
my %ping_res;
@ping_res{qw{ ret dur ip }} = $p->ping($host, 2);
$results{$host} = \%ping_res;
}
foreach my $host (sort keys %results) {
my $pr = $results{$host};
if ($$pr{ret}) {
printf("%s:%.2f\n", $host, 1000 * $$pr{dur});
}
}
...