Yanıtlar:
Ne yapmak istediğine bağlı. İki bağımsız değişkeni girdi dosyası olarak kullanmak istiyorsanız, bunları aktarabilir ve ardından <>
içeriğini okumak için kullanabilirsiniz .
Farklı bir anlamı varsa, bunları kolayca kullanabilir GetOpt::Std
ve GetOpt::Long
işleyebilirsiniz. GetOpt::Std
yalnızca tek karakterli anahtarları destekler ve GetOpt::Long
çok daha esnektir. Gönderen 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
Alternatif olarak, @ARGV
tüm komut satırı bağımsız değişkenlerini içeren özel bir değişkendir. $ARGV[0]
birinci (yani "string1"
sizin durumunuzda) ve $ARGV[1]
ikinci argüman. Erişmek için özel bir modüle ihtiyacınız yok @ARGV
.
Contains the name of the current file when reading from <> .
Onları tıpkı düşündüğünüz gibi geçirirsiniz ve senaryonuzda diziden alırsınız @ARGV
. Şöyle ki:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
Gönderen burada .
$#ARGV + 1
da söyleyebilirdiniz@ARGV
ARGV[0]
veya $argv[1]
belirli bir argüman arıyorsanız kullanın .
foreach my $arg (@ARGV) {
print $arg, "\n";
}
her argümanı yazdırır.
Alternatif olarak, daha seksi bir yol .....
my ($src, $dest) = @ARGV;
"Varsayım" iki değer iletilir. Ek kod, varsayımın güvenli olduğunu doğrulayabilir.
@ARGV
C / C ++ 'nın argv / argc aracılığıyla sağlaması gibi herhangi bir işlem yapmadan kullanılabilir
Yine başka bir seçenek perl -s kullanmaktır, örneğin:
#!/usr/bin/perl -s
print "value of -x: $x\n";
print "value of -name: $name\n";
Sonra şöyle deyin:
% ./myprog -x -name=Jeff
value of -x: 1
value of -name: Jeff
Veya daha fazla ayrıntı için orijinal makaleye bakın:
Bağımsız değişkenler okunacak dosya adlarıysa, içeriklerine erişmek için elmas (<>) operatörünü kullanın:
while (my $line = <>) {
process_line($line);
}
Bağımsız değişkenler seçenekler / anahtarlarsa, slavy13.myopenid.com tarafından gösterildiği gibi GetOpt :: Std veya GetOpt :: Long kullanın.
Başka bir şey olma ihtimaline karşı, @ARGV'den açıkça yürüyerek veya komutla onlara erişebilirsiniz shift
:
while (my $arg = shift) {
print "Found argument $arg\n";
}
(Bunu yapmanın shift
yalnızca tüm sub
s dışındaysanız çalışacağını unutmayın . A içinde , programa iletilenler yerine sub
iletilen bağımsız değişkenlerin listesini alır sub
.)
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
Sadece bazı değerler istiyorsanız, @ARGV dizisini kullanabilirsiniz. Ancak bazı komut satırı seçenekleri işlemek için daha güçlü bir şey arıyorsanız, Getopt :: Long kullanmalısınız .
./script.pl
ya da bir sürü zaman olmayacak.