Not that I am aware of, but if you are not tied to a given command line structure then you could do this:
<example name="t2.pl"> #!/usr/bin/perl use strict; use Getopt::Std; my %args; getopt("f", \%args); my @keys = split / /, $args{'f'}; print "key $_ = field $keys[$_]\n" for (0..$#keys); </example> <output from="t2.pl -f '1 2 3 10'"> key 0 = field 1 key 1 = field 2 key 2 = field 3 key 3 = field 10 </output> On Mon, 2002-02-04 at 14:53, Balint, Jess wrote: > Thanks, the first one works great. Now after all that trouble is there any > way to use Getopt::Std to parse these? I found it in the Perl Cookbook. > Here's what it says: > > use Getopt::Std; > > # -v ARG, -D ARG, -o ARG, sets $opt_v, $opt_D, $opt_o > getopt("vDo"); > # -v ARG, -D ARG, -o ARG, sets $args{v}, $args{D}, $args{o} > getopt("vDo", \%args); > > getopts("vDo:"); # -v, -D, -o ARG, sets $opt_v, $opt_D, $opt_o > getopts("vDo:", \%args); # -v, -D, -o ARG, sets $args{v}, $args{D}, $args{o} > > Now, that is fine but can it get multiple values for a single argument, '-f' > here and store an array reference in the hash for all the values of '-f' > arguments? If so, it may be easier. Thanks for all your help. > > --Jess > > -----Original Message----- > From: Chas Owens [mailto:[EMAIL PROTECTED]] > Sent: Monday, February 04, 2002 2:56 PM > To: Balint, Jess > Subject: RE: Hash Question > > > You know, I almost always test my examples, and when I don't it always > bites me. The following examples have been tested this time. Try one > of these instead: > > <example type="short"> > for (0..$#ARGV) { > if ($ARGV[$_] =~ /^-f(.+)|^-f/) { > if (defined($1)) { > push @keys, $1; > } else { > $_++; > push @keys, $ARGV[$_]; > } > } > } > </example> > > <example type="perlish"> > while (@ARGV) { > $_ = shift @ARGV; > if (/^-f(.+)|^-f/) { > if (defined($1)) { > push @keys, $1; > } else { > push @keys, shift @ARGV; > } > } > } > </example> > > <example type="safer perlish"> > my @argv = @ARGV; > while (@argv) { > $_ = shift @argv; > if (/^-f(.+)|^-f/) { > if (defined($1)) { > push @keys, $1; > } else { > push @keys, shift @argv; > } > } > } > </example> > > On Mon, 2002-02-04 at 13:53, Balint, Jess wrote: > > That seems like the best way to do it, but if I enter -f 3, $tables[n] = " > " > > and not 3 like it should. I think that $1 is defined as " " in this > > argument. What can I do about this? > > > > -----Original Message----- > > > > On Fri, 2002-02-01 at 15:23, Balint, Jess wrote: > > > A scalar value based on the number of command line arguments put into an > > > array. > > > > > > if( $ARGV[$_] =~ /^-f/ ) { > > > # PARSE TABULATION VALUES > > > if( $table ) { > > > $table = $ARGV[$_]; > > > $table =~ s/-f//; > > > $table = $ARGV[$_+1] if( length( $table ) == 0 > ); > > > $tables[$tblcnt] = $table; > > > $tblcnt++; > > > } else { > > > $table = $ARGV[$_]; > > > $table =~ s/-f//; > > > $table = $ARGV[$_+1] if( length( $table ) == 0 > ); > > > $tables[0] = $table; > > > $tblcnt++; > > > } > > > > > <snip /> > > > > First off, you don't need $tblcnt. @tables in a scalar context will > > return the number of elements and you can simply push the value onto the > > array (see perldoc -f push). This also gets rid of the if $table > > business. > > > > Second off, I assume that you are trying to treat -f table and -ftable > > the same. In which case shouldn't you increment $_ if you grab the next > > arg? > > > > if ( $ARGV[$_] =~ /^-f(.*)/ ) { > > # PARSE TABULATION VALUES > > if (defined($1)) { #if there was something after -f > > push @tables, $1; > > } else { #otherwise use next arg > > $_++; > > push @tables, $ARGV[$_]; > > } > > } > > > > print "There were ", scalar(@tables), "tables on the cmdline.\n"; > > > > > > Thirdly, where are the keys for the hashes going to come from? And how > > are you going to know at which level in the hash you want to store the > > data? > > > > To clarify: > > In my example I read the keys from the first three words of a line where > > the first word was the first key, the second word was the second key, > > and the third word was the the third key and then treated the fourth > > word as the data. > > > > -- > > Today is Boomtime the 32nd day of Chaos in the YOLD 3168 > > Hail Eris! > > > > Missle Address: 33:48:3.521N 84:23:34.786W > -- > Today is Setting Orange the 35th day of Chaos in the YOLD 3168 > Hail Eris, Hack Linux! > > Missle Address: 33:48:3.521N 84:23:34.786W -- Today is Setting Orange the 35th day of Chaos in the YOLD 3168 Missle Address: 33:48:3.521N 84:23:34.786W -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]