Antworten:
Kommt darauf an, was du machen willst. Wenn Sie die beiden Argumente als Eingabedateien verwenden möchten, können Sie sie einfach übergeben und dann <>
zum Lesen ihres Inhalts verwenden.
Wenn sie eine andere Bedeutung haben, können Sie sie einfach verwenden GetOpt::Std
und GetOpt::Long
verarbeiten. GetOpt::Std
unterstützt nur Einzelzeichenschalter und GetOpt::Long
ist viel flexibler. Von 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
Alternativ @ARGV
ist eine spezielle Variable, die alle Befehlszeilenargumente enthält. $ARGV[0]
ist das erste (dh "string1"
in Ihrem Fall) und $ARGV[1]
ist das zweite Argument. Sie benötigen kein spezielles Modul für den Zugriff @ARGV
.
Contains the name of the current file when reading from <> .
Sie geben sie so weiter, wie Sie denken, und in Ihrem Skript erhalten Sie sie aus dem Array @ARGV
. Wie so:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
Von hier aus .
$#ARGV + 1
dir hätte man auch sagen können@ARGV
ARGV[0]
oder $argv[1]
wenn Sie nach einem bestimmten Argument suchen.
foreach my $arg (@ARGV) {
print $arg, "\n";
}
druckt jedes Argument.
Alternativ eine sexier perlish Art .....
my ($src, $dest) = @ARGV;
"Angenommen" zwei Werte werden übergeben. Zusätzlicher Code kann überprüfen, ob die Annahme sicher ist.
@ARGV
ohne Aktion von Ihnen verfügbar , genau wie C / C ++ sie über argv / argc liefert
Eine weitere Option ist die Verwendung von Perl-s, z.
#!/usr/bin/perl -s
print "value of -x: $x\n";
print "value of -name: $name\n";
Dann nenne es so:
% ./myprog -x -name=Jeff
value of -x: 1
value of -name: Jeff
Oder lesen Sie den Originalartikel für weitere Details:
Wenn es sich bei den Argumenten um Dateinamen handelt, aus denen gelesen werden soll, verwenden Sie den Operator diamant (<>), um zu deren Inhalt zu gelangen:
while (my $line = <>) {
process_line($line);
}
Wenn die Argumente Optionen / Schalter sind, verwenden Sie GetOpt :: Std oder GetOpt :: Long, wie bereits von slavy13.myopenid.com gezeigt.
Wenn es sich nicht um etwas anderes handelt, können Sie entweder explizit durch @ARGV oder mit dem folgenden shift
Befehl darauf zugreifen :
while (my $arg = shift) {
print "Found argument $arg\n";
}
(Beachten Sie, dass dies shift
nur funktioniert, wenn Sie sich außerhalb aller sub
s befinden. Innerhalb von a sub
wird die Liste der Argumente abgerufen, die sub
an das Programm übergeben wurden, und nicht an das Programm.)
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
Wenn Sie nur einige Werte möchten, können Sie einfach das @ ARGV-Array verwenden. Wenn Sie jedoch nach etwas Stärkerem suchen, um einige Befehlszeilenoptionen zu verarbeiten, sollten Sie Getopt :: Long verwenden .
./script.pl
wird zur Laufzeit eine ganze Menge nichts passieren.