Getopt::Std - 處理單字元開關與開關群集
use Getopt::Std;
getopts('oif:'); # -o & -i are boolean flags, -f takes an argument
# Sets $opt_* as a side effect.
getopts('oif:', \%opts); # options as above. Values in %opts
getopt('oDI'); # -o, -D & -I take arg.
# Sets $opt_* as a side effect.
getopt('oDI', \%opts); # -o, -D & -I take arg. Values in %opts
getopts()
函數處理單字元開關與開關群集。傳遞一個引數,其中包含要辨識的所有開關字串。對於找到的每個開關,如果需要引數且已提供,getopts()
會將 $opt_x
(其中 x
是開關名稱) 設定為引數值。如果需要引數但未提供,$opt_x
會設定為未定義值。如果開關不需要引數,$opt_x
會設定為 1
。
需要引數的開關不論開關與引數之間是否有空格。如果在命令列中找到未指定的開關,系統會警告使用者已提供不明選項。
getopts()
函數會傳回 true,除非找到無效選項。
getopt()
函數類似,但其引數是包含所有需要引數開關的字串。如果未提供開關的引數,例如 y
,對應的 $opt_y
會設定為未定義值。系統會靜默接受未指定的開關。不建議使用 getopt()
。
請注意,如果您的程式碼在建議的 use strict vars
pragma 下執行,您需要使用 our
宣告這些套件變數
our($opt_x, $opt_y);
對於不喜歡建立額外全域變數的人,getopt()
和 getopts()
也會接受雜湊參考作為第二個選用引數。雜湊鍵會是 x
(其中 x
是開關名稱),鍵值會是引數值或未指定引數時的 1
。
為了讓程式處理看起來像開關,但實際上並非開關的參數,兩個函式在看到參數 --
時,將會停止處理開關。--
將從 @ARGV 中移除。
--help
和 --version
如果 -
不是已識別的開關字母,getopts() 會支援參數 --help
和 --version
。如果已定義 main::HELP_MESSAGE()
和/或 main::VERSION_MESSAGE()
,則會呼叫它們;參數為輸出檔案處理、選項處理套件名稱、其版本和開關字串。如果未定義子常式,則會嘗試產生有意義的訊息;為獲得最佳結果,請定義 $main::VERSION。
如果在指令碼中偵測到嵌入式文件 (pod 格式,請參閱 perlpod),--help
也會顯示如何存取文件。
請注意,由於過度偏執,如果 $Getopt::Std::STANDARD_HELP_VERSION 不是 true (預設為 false),則訊息會列印在 STDERR 上,且在訊息列印後,處理會繼續進行。由於這與標準相符行為相反,強烈建議將 $Getopt::Std::STANDARD_HELP_VERSION 設為 true。
可以透過設定 $Getopt::Std::OUTPUT_HELP_VERSION 來變更訊息的輸出檔案處理。可以呼叫函式 help_mess() 和 version_mess(),並將開關字串作為參數,來列印 --help
(不含 使用方式:
行) 和 --version
的訊息。