Hoe kan ik opdrachtregelargumenten doorgeven aan een Perl-programma?

Ik werk aan een Perl-script. Hoe kan ik er opdrachtregelparameters aan doorgeven?

Voorbeeld:

script.pl "string1" "string2"

Antwoord 1, autoriteit 100%

Afhankelijk van wat je wilt doen. Als u de twee argumenten als invoerbestanden wilt gebruiken, kunt u ze gewoon doorgeven en vervolgens <>gebruiken om hun inhoud te lezen.

Als ze een andere betekenis hebben, kun je GetOpt::Stden GetOpt::Longgebruiken om ze gemakkelijk te verwerken. GetOpt::Stdondersteunt alleen schakelaars van één teken en GetOpt::Longis veel flexibeler. Van GetOpt::Long:

use Getopt::Long;
my $data   = "file.dat";
my $length = 24;
my $verbose;
$result = GetOptions ("length=i" => \$length,    # numeric
                    "file=s"   => \$data,      # string
                    "verbose"  => \$verbose);  # flag

Als alternatief is @ARGVeen speciale variabele die alle opdrachtregelargumenten bevat. $ARGV[0]is het eerste (d.w.z. "string1"in jouw geval) en $ARGV[1]is het tweede argument. U hebt geen speciale module nodig om toegang te krijgen tot @ARGV.


Antwoord 2, autoriteit 32%

Je geeft ze door zoals je denkt, en in je script haal je ze uit de array @ARGV. Vind ik leuk:

my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
   print "$ARGV[$argnum]\n";
}

Van hier.


Antwoord 3, autoriteit 16%

foreach my $arg (@ARGV) {
    print $arg, "\n";
}

drukt elk argument af.


Antwoord 4, autoriteit 13%

Als alternatief, een meer sexy, perish manier…..

my ($src, $dest) = @ARGV;

Er wordt aangenomen dat er twee waarden zijn doorgegeven. Extra code kan controleren of de aanname veilig is.


Antwoord 5, autoriteit 12%

Nog een andere optie is om perl -s te gebruiken, bijvoorbeeld:

#!/usr/bin/perl -s
print "value of -x: $x\n";
print "value of -name: $name\n";

Noem het dan zo:

% ./myprog -x -name=Jeff
value of -x: 1
value of -name: Jeff

Of bekijk het originele artikelvoor meer details:


Antwoord 6, autoriteit 7%

Je hebt er direct toegang toe door de speciale variabele @ARGVtoe te wijzen aan een lijst met variabelen.
Dus bijvoorbeeld:

( $st, $prod, $ar, $file, $chart, $e, $max, $flag ,$id) = @ARGV;

perl tmp.pl 1 2 3 4 5

voer hier de afbeeldingsbeschrijving in


Antwoord 7, autoriteit 4%

Als de argumenten bestandsnamen zijn waaruit gelezen moet worden, gebruik dan de diamanten (<>) operator om bij de inhoud te komen:

while (my $line = <>) {
  process_line($line);
}

Als de argumenten opties/switches zijn, gebruik dan GetOpt::Std of GetOpt::Long, zoals al is aangetoond door slavy13.myopenid.com.

In het geval dat ze iets anders zijn, kun je ze openen door expliciet door @ARGV te lopen of met de opdracht shift:

while (my $arg = shift) {
  print "Found argument $arg\n";
}

(Merk op dat dit doen met shiftalleen werkt als u zich buiten alle subs bevindt. Binnen een subzal het ophalen de lijst met argumenten die aan de subzijn doorgegeven in plaats van aan het programma.)


Antwoord 8, autoriteit 3%

my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}

Antwoord 9

Als u slechts enkele waarden wilt, kunt u gewoon de @ARGV-array gebruiken. Maar als u op zoek bent naar iets krachtigers om bepaalde opdrachtregelopties te verwerken, moet u gebruiken Getopt::Lang.

Other episodes