簡體   English   中英

如何將命令行參數傳遞給 Perl 程序?

[英]How can I pass command-line arguments to a Perl program?

我正在編寫 Perl 腳本。 如何將命令行參數傳遞給它?

示例:

script.pl "string1" "string2"

取決於你想做什么。 如果你想使用這兩個參數作為輸入文件,你可以直接傳入它們,然后使用<>讀取它們的內容。

如果它們有不同的含義,您可以使用GetOpt::StdGetOpt::Long輕松處理它們。 GetOpt::Std僅支持單字符開關,而GetOpt::Long更加靈活。 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

或者,@ @ARGV是一個包含所有命令行參數的特殊變量。 $ARGV[0]是第一個(即在您的情況下為"string1" ),而$ARGV[1]是第二個參數。 您不需要特殊模塊來訪問@ARGV

你就像你想的那樣傳遞它們,在你的腳本中,你從數組@ARGV獲取它們。 像這樣:

my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";

foreach my $argnum (0 .. $#ARGV) {

   print "$ARGV[$argnum]\n";

}

這里開始

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

將打印每個參數。

或者,一種更性感的perlish方式......

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

“假設”兩個值被傳遞。 額外的代碼可以驗證假設是安全的。

另一種選擇是使用 perl -s,例如:

#!/usr/bin/perl -s

print "value of -x: $x\n";
print "value of -name: $name\n";

然后像這樣調用它:

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

或查看原文了解更多詳情:

您可以通過將特殊變量@ARGV分配給變量@ARGV來直接訪問它們。 因此,例如:

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

perl tmp.pl 1 2 3 4 5

在此處輸入圖片說明

如果參數是要讀取的文件名,請使用菱形 (<>) 運算符獲取其內容:

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

如果參數是選項/開關,請使用 GetOpt::Std 或 GetOpt::Long,如 slavy13.myopenid.com 所示。

如果它們是其他東西,您可以通過顯式遍歷 @ARGV 或使用shift命令來訪問它們:

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

(請注意,使用shift執行此操作僅當您在所有sub之外時才有效。在sub ,它將檢索傳遞給sub的參數列表,而不是傳遞給程序的參數列表。)

my $output_file;

if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))

{

$output_file= chomp($ARGV[1]) ;


}

如果你只想要一些值,你可以只使用 @ARGV 數組。 但是如果你正在尋找更強大的東西來進行一些命令行選項處理,你應該使用Getopt::Long

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM