#!/usr/bin/perl -w $| = 1; while (<>) { my ($host) = split; print "$host: "; open(PING, "ping -q -c 10 $host|"); my @lines = ; close(PING); if ($lines[4] && $lines[4] =~ m{= (\d+\.\d*)/(\d+\.\d*)/(\d+\.\d*).* ms}) { print "$1/$2/$3\n"; push @spreads, [ $host, $3 - $1 ]; push @aves, [ $host, $2 ]; push @maxes, [ $host, $3 ]; } else { print "failed\n"; } } @spreads = sort { $a->[1] <=> $b->[1] } @spreads; @aves = sort { $a->[1] <=> $b->[1] } @aves; @maxes = sort { $a->[1] <=> $b->[1] } @maxes; # get the best average unless it is the same as best spread otherwise get 2nd # best average $best_ave = $aves[0]->[0] ne $spreads[0]->[0]? $aves[0] : $aves[1]; # same for best max, but gotta watch out for best average too for ($i = 0; $maxes[$i]->[0] eq $spreads[0]->[0] || $maxes[$i]->[0] eq $best_ave->[0]; $i++) {} print "best spread: $spreads[0]->[0]\n", "best ave: $best_ave->[0]\n", "best max: $maxes[$i]->[0]\n";