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
编译指示下运行,则需要使用 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 不为真(默认值为假),则消息将打印到 STDERR,并且在消息打印后处理将继续。由于这与标准符合行为相反,强烈建议将 $Getopt::Std::STANDARD_HELP_VERSION 设置为 true。
可以通过设置 $Getopt::Std::OUTPUT_HELP_VERSION 来更改消息的输出文件句柄。可以通过调用函数 help_mess() 和 version_mess() 并将开关字符串作为参数来打印 --help
(不带 Usage:
行)和 --version
的消息。