Re: perl qstn...
- From: Giorgos Keramidas <keramida@xxxxxxxxxxxxxxx>
- Date: Tue, 06 Apr 2010 17:18:59 +0300
On Sun, 04 Apr 2010 02:01:53 -0700, Gary Kline <kline@xxxxxxxxxxx> wrote:
thanks for your url as well and the others to posted. but it seems
like overkill since i dont need any explicit option or argument. i
just need the script to tell me whether i have an arg or not.
following is something i've kept in one of my junk drawers from when i
was learning to write bourne sscripts. it uses the "$[token]" syntax
that determines whether there are Any args on the cmdline. if not,
the script prints a message and exits.
#!/bin/sh
if [ $# -eq 0 ]
then
echo "No args; need filename."
else
echo "$1"
fi
After a couple hours experimentation, the following does the same for my
perl scripts:
#!/usr/bin/perl
$argc = @ARGV;
if (! $argc ) {
printf("No args; need filename.\n");
}
else {
printf("%s\n", @ARGV);
}
Yes, that's very close to the sh(1) version. Perl's behavior in this
case is described in the 'perlvar' manpage:
@ARGV The array @ARGV contains the command-line arguments intended
for the script. $#ARGV is generally the number of
arguments minus one, because $ARGV[0] is the first
argument, not the program's command name itself. See $0
for the command name.
In other words, when @ARGV appears in "scalar context" it yields the
'size' of the @ARGV array, e.g.:
% cat foo.pl
printf("%d .. args = [%s]\n", int(@ARGV), join(', ', (@ARGV)));
% perl foo.pl
0 .. args = []
% perl foo.pl 1
1 .. args = [1]
% perl foo.pl 1 2 3
3 .. args = [1, 2, 3]
So when int(@ARGV) is zero you know that there are no arguments at all.
This means you can write your sh version like this in Perl:
#!/usr/bin/perl
if (int(@ARGV) == 0) {
die "No args; at least one filename expected";
}
printf("%s\n", join(' ', (@ARGV)));
This is "good enough" as a command-line handling trick for really simple
scripts, but you should probably have a look at the Getopt::Std and the
Getopt::Long modules for longer scripts. Using them will make your
option parsing code much cleaner and easier to change in the future.
_______________________________________________
freebsd-questions@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscribe@xxxxxxxxxxx"
- Follow-Ups:
- Re: perl qstn...
- From: Randal L. Schwartz
- Re: perl qstn...
- References:
- perl qstn...
- From: Gary Kline
- Re: perl qstn...
- From: Greg Larkin
- Re: perl qstn...
- From: Gary Kline
- perl qstn...
- Prev by Date: RE: How customized can an mfsroot be?
- Next by Date: Re: perl qstn...
- Previous by thread: Re: perl qstn...
- Next by thread: Re: perl qstn...
- Index(es):
Relevant Pages
|