Although the Getopt::Std documentation doesn't seem to mention it, -t and -s are special. Consider:
use strict; use warnings; use Getopt::Std; use Data::Dump::Streamer; testSwitches (qw(-p -q)); testSwitches (qw(-s)); testSwitches (qw(-t)); testSwitches (qw(-s -t)); testSwitches (qw(-p)); sub testSwitches { local @ARGV = @_; my %opt; my $test; print join (' ', @ARGV), "\n"; getopt ('st', \%opt); Dump \%opt; print "\n"; }
Prints:
-p -q $HASH1 = { p => 1, q => 1 }; -s $HASH1 = { s => undef }; -t $HASH1 = { t => undef }; -s -t $HASH1 = { s => '-t' }; -p $HASH1 = { p => 1 };
Is this some sort of *nix convention perhaps?
Note that you could use exists for your test instead of defined. You could also reduce the number of parenthesis to make the code more readable:
if (! exists $opt{s} and ! exists $opt{t}) {
Update: Struck silliness. Left code as a nice template for playing with/testing/demonstrating option processing.
In reply to Re: Detecting an undefined hash key
by GrandFather
in thread Detecting an undefined hash key
by LesleyB
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |