如何解析命令行参数?

时间:2010-10-19 21:30:19

标签: perl arguments command-line-arguments

我想解析perl脚本中的参数列表,例如我遇到这种情况:

script.pl -h 127.0.0.1 -u user -p pass arg1 arg2 arg3

如何解析数组中不是选项的参数列表,以及标量值中的选项参数?

感谢。

2 个答案:

答案 0 :(得分:12)

程序的参数存储在@ARGV

如果您想对交换机进行任何处理,请使用Getopt::Long,这是一个标准的Perl模块。

即使您认为“哦,我可以从列表中选择我想要的东西”,请使用Getopt::Long,因为我保证您将有时间添加更多开关,并且您将结束说:“伙计,我希望我从一开始就开始使用Getopt :: Long。”

另请参阅我的博文"Use Getopt::Long even if you think you don't need it"

答案 1 :(得分:11)

好吧,如果它们是命令行中唯一没有作为选项提供的东西,那么它们仍然应该在@ARGV中。所以只需使用@ARGV

use Getopt::Long;

# save arguments following -h or --host in the scalar $host
# the '=s' means that an argument follows the option
# they can follow by a space or '=' ( --host=127.0.0.1 )
GetOptions( 'host=s' => \my $host 
          , 'user=s' => \my $user  # same for --user or -u
          , 'pass=s' => \my $pass  # same for --pass or -p
          );

# @ARGV: [ qw<arg1 arg2 arg3> ]

请参阅Getopt::Long