in reply to Argument in require statement

If only I had turned to page 166 in the book above I found a neat solution: Use caller to determine whether the script is called from the command-line (caller returns undef) or from a subroutine or "eval" or "require" (caller returns name of the calling package).
luckynumber.t
use warnings; use strict; use Test::More; use Test::Exception; BEGIN { plan tests => 1, todo => [] } # ------ load script with arg - expect ok ok( require 'luckynumber.pl', 'script loaded ok');

luckynumber.pl
use strict; use warnings; use Getopt::Long; my $luckynumber = undef; sub main { GetOptions("luckynumber=i" => \$luckynumber) or die("GetOptions fa +iled"); die "missing argument luckynumber" unless defined($luckynumber); print "Lucky number is " . $luckynumber . "\n"; } # See also perldoc -f caller main() if! caller(); 1;

Running the test yields:
$ prove luckynumber.t luckynumber....ok All tests successful. Files=1, Tests=1, 0 wallclock secs ( 0.06 cusr + 0.01 csys = 0.07 C +PU)


Andreas
--