in reply to Detecting an undefined hash key

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.


Perl reduces RSI - it saves typing

Replies are listed 'Best First'.
Re^2: Detecting an undefined hash key
by JavaFan (Canon) on Oct 01, 2008 at 11:36 UTC
    Nothing special going here. But with 'getopt ("st")', you declare -s and -t to take an argument. So, if you just provide -s, the argument is undef. If you provide -s -t, -t is the argument of -s.

      Doh! /me slaps forehead with a wet fish!


      Perl reduces RSI - it saves typing