in reply to pod2usage question

The problem is that in the BEGIN block your script chdirs to a different directory from where you invoked the script, so, by the time that pod2usage is executed, the value returned by $0 (which pod2usage relies on) no longer points to the script. This is an easy problem to fix, but I don't understand why your script is chdir-ing in the first place.

the lowliest monk

Replies are listed 'Best First'.
Re^2: pod2usage question
by dwhitney (Beadle) on May 06, 2005 at 23:31 UTC
    Well, I've changed by BEGIN block as follows:
    BEGIN { use strict; use warnings; print "I am here!\n"; use Pod::Usage qw( pod2usage ); ### Bomb if there is nothing on the command line ### pod2usage(2) if ( not @ARGV ); print "I am there!\n"; @cmd = fileparse( File::Spec->rel2abs( $0 ), '\.[^.]*' ); $LIBPATH = File::Spec->catdir( $cmd[1], "../lib" ); eval " use lib '$LIBPATH'"; chdir "$LIBPATH"; use Data::Dumper; printf "---ENV---\n%s\n", Dumper( \%ENV ); }
    Now here's the funky part, on a Win32 box, I get the output:
    I am here! Usage: move_data.pl [options] Options: -help..........Brief help message -man...........Full documentation -config........Full path to the configuration file
    Which is what I expected, while on a Linux machine, I only get the I am here!...
    What gives?
      Which is what I expected, while on a Linux machine, I only get the I am here!...
      Odd, works just fine for me. Maybe you should try running it in the debugger. Since the relevant code is in a BEGIN block, you need to put
      BEGIN { $DB::single = 1; ...
      in there to make sure the debugger doesn't just jump over it. Then, call
      $ perl -d move_data.pl
      from the command line and step through the source lines using n and s.