use strict; use warnings; while () { next unless /\S/; my ( $sunrise, $sunset ) = get_time($_); next unless $sunrise && $sunset; printf "Sunrise is: %s Sunset is: %s\n", $sunrise, $sunset; } sub get_time { my $string = shift; return unless $string =~ /sunrise:\s+(\d+:\d+)\s+sunset:\s+(\d+:\d+)/; return ( $1, $2 ); } __DATA__ Aberdeen, Scotland 57 9 N 2 9 W sunrise: 03:12 sunset: 21:08 Adelaide, Australia 34 55 S 138 36 E sunrise: 06:52 sunset: 16:41