scripting languages...

Giorgos Keramidas keramida at ceid.upatras.gr
Fri Apr 28 00:20:39 UTC 2006


On 2006-04-27 16:58, Gary Kline <kline at tao.thought.org> wrote:
> > Getting at argv/argc is actually pretty simple in Perl. The global array
> > @ARGV contains the arguments given on the command-line, but not the name
> > of the file (this datum is contained in $0). Therefore your argv[1] in C
> > is $ARGV[0] in Perl. The number of command-line arguments can be
> > obtained in two ways, either you interpret the array in a scalar context
> > and get its length: ``my $argc = scalar @ARGV'' or you use the last
> > index of the array and add one: ``my $argc = $#ARGV + 1''. Of course, in
> > most cases you'll just want to loop over the command-line args, so a
> > foreach loop should suffice, or of course one of the Getopt (Getopt::Std
> > or Getopt::Long in most cases) modules.
> 
> 	So, could I say:
> 
> 	my $argc = $#ARGV+1; $count = 0;
> 	while ($argc--)
> 	{
> 		if (! (checkErr($ARGV[$count], $count)))
> 		{
> 			printf("Processing %s\n", $ARGV[$count]);
> 			doWhatever($ARGV[$count]);
> 		}
> 		$count++;
> 	}
> 
> 	or something close-to!?

I believe the idiomatic way of doing this would be something more like:

        foreach $arg (@ARGV) {
            if (!checkErr($arg)) {
                printf("Processing %s\n", $arg);
                doWhatever($arg);
            }
        }

Your version may work too, but I'm always wary of all the index
trickery involved in handling $#ARGV fearing it may easily lead to
off-by-one bugs.  So I prefer foreach() loops :)




More information about the freebsd-questions mailing list