从命令行argv解析数字

时间:2014-04-01 14:50:31

标签: regex perl

我想更改一个执行循环的perl脚本,我希望通过命令行选项传递循环数。程序现在接收一些选项,然后我需要更改它以接收新参数,但这是我第一次看到perl脚本,然后我不知道如何更改。 程序的开始(解析命令行选项)是:

if ($#ARGV >= 1) {
   for ($i = 1; $i <= $#ARGV; $i++) {
       if ($ARGV[$i] =~ /^\-/) {
           if ($ARGV[$i] =~ /\-test/) {
               //do something
           }
       } else {
            //do something other
       }
  }
}

我认为我必须提出类似的内容:

if ($ARGV[$i] =~ /^\-L40/)

但它只匹配到40,我不知道如何解析附加到-L参数的数字以用于循环限制。

如果有任何类似的问题,请提前致谢并对不起,但我找不到。

2 个答案:

答案 0 :(得分:4)

use Getopt::Long qw( );

sub usage {
   print(STDERR "usage: prog [--test] [-L NUM]\n");
   exit(1);
}    

GetOptions(
   'test' => \my $opt_test,
   'L=i'  => \my $opt_L,
)
   or usage();

die("-L must be followed by a positive integer\n")
    if defined($opt_L) && $opt_L < 1;

答案 1 :(得分:1)

类似的东西:

my $loopLimit = 1;  # default

if ($#ARGV >= 1)
{
  for ($i = 1; $i <= $#ARGV; $i++)
  {
    if ($ARGV[$i] =~ /^\-/)
    {
      if ($ARGV[$i] =~ /\-test/)
      {
          # do something
      }
      elsif ($ARGV[$i] =~ /\-L(\d+)/)  # -L followed by digits
      {
          $loopLimit = $1;
      }
    }
    else
    {
        # do something other
    }
  }
}