Why doesn't this Windows .cmd script pick up the -z command line switch:
It does. Try the following code with the argument of -z passed through from the outside:
@rem = '--*-Perl-*-- @echo off perl -x "%~dpnx0" %* goto endofperl @rem '; #!perl use strict; use warnings; print "\$ARGV[$_]= $ARGV[$_]\n" for 0..$#ARGV; use Getopt::Std; my %opts = (); getopt( 'z', \%opts); print "exists z\n" if exists $opts{'z'}; print "defined z='$opts{'z'}'\n" if defined $opts{'z'}; print "\$opts{z} is true" if $opts{'z'}; __END__ :endofperl
You will see that the -z is correctly propagated from the batch wrapper into perl. You will also see that $opts{'z'} exists, but contains an undefined value. It looks like from the documentation this behaviour is incorrect, and that it should in fact set $opts{'z'} to be true in this situation. It also looks like this behaviour has been fixed in a later version of Getopt::Std. The 5.8.1 version doesnt have this problem, the 5.6.1 version does. UPDATE: No im wrong here, changes were made to this module between 5.6.1 and 5.8.1 but they dont cover this issue.
Incidentally the reason this worked in your second variant is because the second -z is being treated as the value for the first -z option. IOW, $opts{'z'} eq '-z' in the second case, and !defined $opts{'z'} and exists($opts{'z'}) is true in the first.
I feel entitled to be a little critical here. It didnt take long to determine this was a fault in Getopt::Std, nor to identify and fix the bug. Next time I suggest you be a bit more thorough in your testing and debugging. Also you may find that Getopt::Long while a bit intimidating to look at the first time actually is a more flexible and powerful tool for this job. It certainly wouldnt have left you as confused about this as Getop::Std has done.
HTH
First they ignore you, then they laugh at you, then they fight you, then you win.
-- Gandhi
In reply to Re: Passing switches through pl2bat scripts
by demerphq
in thread Passing switches through pl2bat scripts
by PhilHibbs
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |