use strict; use warnings; use Tk; my $fh; my $mw = MainWindow->new; $mw->withdraw; if (! open $fh, '<', "COM4:") { $mw->messageBox ( -message => 'GPS unit not available', -title => 'Time and location', -type => 'Ok', -icon => 'info', ); exit; } my $location; while (<$fh>) { next if ! /^\$GPGGA,/; chomp; my ($hour, $min, $sec, $latDeg, $latMin, $latHemi, $longDeg, $longMin, $longHem) = /(\d\d)(\d\d)(\d\d),(\d\d)([\d.]+),(\S),(\d\d)([\d.]+),(\S),/; next if ! defined ($longHem); $latMin = toMS ($latMin); $longMin = toMS ($longMin); $location = sprintf "%s", "$hour:$min:$sec, $latDeg $latMin$latHemi, $longDeg $longMin$longHem"; last; } $mw->messageBox ( -message => $location, -title => 'Time and location', -type => 'Ok' ); sub toMS { my $x = shift; my $min = int ($x); $x = ($x - $min) * 60; return sprintf "%d %.2f", $min, $x; }