sorry listers, I didn't notice that RR's webmail html app. was adding conversation attachments when I hit reply and then changed the email around for my needs.
Second, thanks for another great response $Bill. I'll investigate the Getopt module as well. ----- Original Message ----- From: $Bill Luebkert <[EMAIL PROTECTED]> Date: Thursday, November 3, 2005 1:50 pm Subject: Re: [Perl-unix-users] parsing ARGV > [EMAIL PROTECTED] wrote: > > > Before I roll my own ARGV parse code I wanted to know if someone > had > > some sample code to get me started. I just want to be able to > pass > > simple switches that contain one parameter each to my perl app. > I have > > looked to the list first for I plan to accept the switches in > any > > order, but only allow each of them to be called once each. The > only > > important dependencies that I can think of right now is that > switch - > > cmd has to be passed if any other switch is used and all > switches must > > have a valid parameter. I'm not asking anyone to write me > anything, > > but any related sample code will help tremendously. > > > > ex: perlscript -cmd show -type session -loc all > > ex: perlscript -type process -cmd show > > First: Don't piggy-back on someone else's post. Create a new thread > (just copy the email address). > > You can always use one of the getopt modules out there, but I'm happy > with my own little invention (untested likeness in this post) : > > use strict; > use warnings; > > our %A; # get commandline switches into %A > for (my $ii = 0; $ii < @ARGV; ) { > last if $ARGV[$ii] =~ /^--$/; > if ($ARGV[$ii] !~ /^-{1,2}(.*)$/) { $ii++; next; } > my $arg = $1; splice @ARGV, $ii, 1; > if ($arg =~ /^([\w]+)=(.*)$/) { $A{$1} = $2; } else { $A{$1} ++; } > } > > # The syntax is slightly different for you (note the ='s) : > > # ex: perlscript -cmd=show -type=session -loc=all > # ex: perlscript -type=process -cmd=show > > # Then I do a usage like this: > > (my $prog = $)) =~ s/^.*[\\\/]//; > my $usage << EOD; > > Usage: $prog [-cmd=<cmd>] [-type={x|y|z}] [-loc=<loc>] > -cmd=<cmd> <cmd> is the command to execute {show|tell|etc} > -cmd is a mandatory arg (def: show) > -loc=<loc> <loc> is the full path to the widget factory (def: > C:/widget) -type={x|y|z} Widget type to use (def: x) > > EOD > die $usage if ${h} or $A{help} or not $A{cmd}; > > # Then I usually handle them like: > > my $cmd = $A{cmd} || 'show'; # command to execute > my $loc = $A{loc} || 'C:/widget'; # widget location > my $type = ${type} || 'x'; # type of widget > > # You could easily handle multiple switches of the same name by > # either appending them with | bars or using an anonymous array: > > $A{$1} .= "|$2" if exists $A{$1}; # append the next value after | > > # or not as usable for me: > > push @{$A{$1}}, $2; # in this case all args would be arrays > # unless you had a type hash to determine > # arg type (scalar|array) > _______________________________________________ Perl-Unix-Users mailing list Perl-Unix-Users@listserv.ActiveState.com To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs