http://www.perlmonks.org?node_id=303965

bradcathey has asked for the wisdom of the Perl Monks concerning the following question:

Part of my "re-learn Perl the right way" journey.

Very simple, I want to use an external file containing a subroutine called by my main script. At the same time, I'm trying to get my head around variable scoping, so may need help there. Have searched the literature (Camel, Llama, Sheep and PM) and can't find a simple explanation of how to put all the pieces together in a working model. Anyway, here's what I have for my main:
#!/usr/bin/perl print "Content-type: text/plain\n\n"; use strict; use CGI::Carp qw(fatalsToBrowser); use validate; my $the_time = "12:23 pm"; &val_time( $the_time ); $the_time = $val; if ($the_time) { print "$the_time\n" } else { print "error\n" }
My external file ('validate.pm'):
#!/usr/bin/perl our $val; sub val_time { $val = shift; $val = ($val =~ /^(\d{2}):(\d{2}) (am|pm)$/) ? "$1:$2 $3" : 1; }
When I run it, I get validate.pm did not return a true value at timeval.pl line 7. No surprise, but what am I missing:

1. correct scoping? 2. correct set-up of external? 3. correct call of subroutine from main?

I figure it's easier than I think, just help get me on the right path. Thanks!