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::Stdve GetOpt::Longişleyebilirsiniz. GetOpt::Stdyalnı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, @ARGVtü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 + 1da 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 shiftyalnızca tüm subs dışındaysanız çalışacağını unutmayın . A içinde , programa iletilenler yerine subiletilen 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.plya da bir sürü zaman olmayacak.