Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery

How do you use command line parameters?

by BlackShift (Initiate)
on Sep 20, 2000 at 18:30 UTC ( #33287=perlquestion: print w/replies, xml ) Need Help??

BlackShift has asked for the wisdom of the Perl Monks concerning the following question: (input and output)

How do you use command line parameters?

Originally posted as a Categorized Question.

  • Comment on How do you use command line parameters?

Replies are listed 'Best First'.
Re: How do you use command line parameters?
by japhy (Canon) on Sep 20, 2000 at 18:47 UTC
    Command-line parameters are sent to a Perl program in the same way they're sent to any other.
    % ./myprog foo bar blat
    The @ARGV array holds the command-line arguments, and in this case, it would hold ('foo', 'bar', 'blat').

    Perl allows for simplistic command-line options via the -s option to perl:
    #!/usr/bin/perl -s print "value of -x: $x\n"; print "value of -name: $name\n";
    Here's a sample run:
    % ./myprog -x -name=Jeff value of -x: 1 value of -name: Jeff
    If you want more complex option parsing, there are two standard modules that can do this for you: Getopt::Std and Getopt::Long.

    Perl allows you to treat the arguments in @ARGV as filenames, by using the special case of the <> operator.
    while (<>) { # $ARGV is the filename # $_ is the line # $. is the line number # reset it to 0 by doing # $. = 0 if eof; # or # close ARGV if eof; }
      That is, you can use the arguments in @ARGV as filenames to read from. Should've made that clear.

Re: How do you use command line parameters?
by BlackShift (Initiate) on Sep 20, 2000 at 18:48 UTC
    #!/usr/bin/perl foreach (@ARGV) { print $_; };
Re: How do you use command line parameters?
by DigitalKitty (Parson) on Aug 05, 2002 at 23:39 UTC
    The easiest way is to use the Getopt::Std module ( it is part of the standard distribution ). Here is a sample program.
    #!/usr/bin/perl -w use strict; use Getopt::Std; use vars qw( $opt_s $opt_r $opt_n ); if( ! getopts('srn' ) ) { die "Usage: -srn filename\n"; #Example: perl -r test.txt } my @file = <>; if( $opt_s ) { @file = sort { $a cmp $b } @file; } if( $opt_r ) { @file = reverse @file; } if( $opt_n ) { @file = sort { $a <=> $b } @file; }

    Each command-line switch is assigned to its respective scalar variable ( $opt_s, etc. ) and if it exists, its individual value is 1.
    You can also use multiple switches:
    $perl -rn test.txt # Reverse the contents of test.txt and perform # a numeric sort on it.

    # Sample runs: C:\perl>perl -r test.txt third line. second line. first line. C:\perl> C:\perl>perl -n test.txt 2 33 33 44 48 55 889 990 C:\perl> C:\perl>perl -c test.txt Unknown option: c Usage: -srn filename C:\perl>

    In the last example, I hadn't declared an $opt_c in the line 'use vars qw ( $opt_s ... );' or an if() statement to handle it. This is why I received the message.

    Hope this helps,

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://33287]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (3)
As of 2021-06-13 12:27 GMT
Find Nodes?
    Voting Booth?
    What does the "s" stand for in "perls"? (Whence perls)

    Results (55 votes). Check out past polls.