Odpowiedzi:
Zależy od tego, co chcesz zrobić. Jeśli chcesz użyć tych dwóch argumentów jako plików wejściowych, możesz je po prostu przekazać, a następnie użyć <>
do odczytania ich zawartości.
Jeśli mają inne znaczenie, możesz je łatwo wykorzystać GetOpt::Std
i GetOpt::Long
przetworzyć. GetOpt::Std
obsługuje tylko przełączniki jednoznakowe i GetOpt::Long
jest znacznie bardziej elastyczny. Od 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
Alternatywnie, @ARGV
jest to specjalna zmienna, która zawiera wszystkie argumenty wiersza poleceń. $ARGV[0]
jest pierwszym (tj. "string1"
w twoim przypadku) i $ARGV[1]
jest drugim argumentem. Nie potrzebujesz specjalnego modułu, aby uzyskać dostęp @ARGV
.
Contains the name of the current file when reading from <> .
Przekazujesz je tak, jak myślisz, aw swoim skrypcie pobierasz je z tablicy @ARGV
. Tak jak to:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
Od tutaj .
$#ARGV + 1
ciebie mógłbyś też powiedzieć@ARGV
ARGV[0]
lub $argv[1]
jeśli szukasz konkretnego argumentu.
foreach my $arg (@ARGV) {
print $arg, "\n";
}
wypisze każdy argument.
Alternatywnie, bardziej seksowny, niebezpieczny sposób .....
my ($src, $dest) = @ARGV;
„Zakłada” dwie wartości są przekazywane. Dodatkowy kod może zweryfikować, że założenie jest bezpieczne.
@ARGV
bez żadnej akcji z Twojej strony, tak jak C / C ++ dostarcza je przez argv / argc
Jeszcze inną opcją jest użycie perl -s, np:
#!/usr/bin/perl -s
print "value of -x: $x\n";
print "value of -name: $name\n";
Następnie nazwij to tak:
% ./myprog -x -name=Jeff
value of -x: 1
value of -name: Jeff
Więcej informacji można znaleźć w oryginalnym artykule :
Jeśli argumenty są nazwami plików, z których mają być odczytane, użyj operatora rombu (<>), aby uzyskać dostęp do ich zawartości:
while (my $line = <>) {
process_line($line);
}
Jeśli argumentami są opcje / przełączniki, użyj GetOpt :: Std lub GetOpt :: Long, jak już pokazano na slavy13.myopenid.com.
Jeśli nie ma szans, że są czymś innym, możesz uzyskać do nich dostęp, przechodząc bezpośrednio przez @ARGV lub za pomocą shift
polecenia:
while (my $arg = shift) {
print "Found argument $arg\n";
}
(Zauważ, że zrobienie tego z shift
zadziała tylko wtedy, gdy jesteś poza wszystkimi sub
s. Wewnątrz a sub
, pobierze listę argumentów przekazanych do programu, sub
a nie tych przekazanych do programu).
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
Jeśli potrzebujesz tylko niektórych wartości, możesz po prostu użyć tablicy @ARGV. Ale jeśli szukasz czegoś mocniejszego do przetwarzania niektórych opcji wiersza poleceń, powinieneś użyć Getopt :: Long .
./script.pl
albo wiele, nic się nie wydarzy w czasie wykonywania.