【问题标题】:More than one commandline input in perl using argV使用 argV 在 perl 中输入多个命令行
【发布时间】:2016-01-22 20:55:16
【问题描述】:

如何在 Perl 中使用命令行参数来获取用户输入的文件?可能像:wxp.pl - file {file path}.
我是 Perl 的新手,所以建议我任何有用的东西。以及如何使它像在命令行中询问的多个参数。 例如:

exp.pl -file {file path}
           -x    {it's arg}
           -y    {y's arg}

【问题讨论】:

    标签: perl command-line command-line-arguments perl-module


    【解决方案1】:

    如果你想简单地传递参数,你可以这样做:

    perl exp.pl arg1 agr2
    

    如果您想要更多,请使用Getopt::Long 模块。

    【讨论】:

    • 哦,谢谢你,我必须查一下 Getopt::Long 因为我不知道怎么做 新到你知道的 perl 中。
    • 看看并尝试自己做,如果您遇到任何问题,请来这里尝试。我们很高兴为您提供帮助。
    【解决方案2】:

    我建议 GetOpt::Long 来实现这一点。但如果你想自己做,看看这样的东西是否方便:

    use strict;
    use warnings;
    
    # Usage check. For "perl xxx.pl -a arg1 -b arg2" args. should be even nos. 
    
    if (scalar @ARGV == 0 or scalar @ARGV % 2 != 0) {
        print "Usage:\n\t$0 -a arg1 -b arg2 requires all args\n";
        exit 0;
    }
    
    # This one convert cmd line args. to hash ex. (perl xxx.pl -a arg1 -b arg2) to {-a => arg1, -b => arg2}
    my %argHash = @ARGV;    
    
    # Optional but see if all the args are present
    my $maxArgs = 2;
    if (scalar keys %argHash != $maxArgs) {
        print "Usage:\n\t$0 -a arg1 -b arg2 requires exactly $maxArgs args\n";
        exit 0;
    }
    
    # Parse arguments. 
    print "$0:\n";
    for my $key (keys %argHash) {
        print "\t $key: $argHash{$key}\n";  
    }
    
    1;
    

    结果:

    c:\swadhi\perl>perl cmdline.pl
    Usage:
            cmdline.pl -a arg1 -b arg2 requires all args
    
    c:\swadhi\perl>perl cmdline.pl -a "user" -b
    Usage:
            cmdline.pl -a arg1 -b arg2 requires all args
    
    c:\swadhi\perl>perl cmdline.pl -a "user" -b "Command"
    cmdline.pl:
             -a: user
             -b: Command
    
    c:\swadhi\perl>perl cmdline.pl -a "user" -b "Command" -c "mock"
    Usage:
            cmdline.pl -a arg1 -b arg2 requires exactly 2 args
    
    c:\swadhi\perl>perl cmdline.pl -a "user"
    Usage:
            cmdline.pl -a arg1 -b arg2 requires exactly 2 args
    

    【讨论】:

      【解决方案3】:

      更简单的 GetOpt::Long 版本

      use strict;
      use warnings;
      use Getopt::Long qw(GetOptions);
      
      my $user_name;
      
      GetOptions('user=s' => \$user_name) or die "Usage: $0 --user NAME\n";
      
      if ($user_name) {
          print  $user_name, "\n";
      }
      

      结果:

      c:\swadhi\perl>perl cmdline.pl -user Swadhi
      Swadhi
      
      c:\swadhi\perl>perl cmdline.pl
      
      c:\swadhi\perl>perl cmdline.pl -p s
      Unknown option: p
      Usage: cmdline.pl --user NAME
      
      c:\swadhi\perl>perl cmdline.pl -u "This should also work"
      This should also work
      

      【讨论】:

      • 好吧,我会尝试在我的解决方案中使用这个,谢谢。虽然我正在开发一个电子邮件模块,我想在其中输入一个电子邮件 ID 作为参数,这样它就会发送一封邮件到那些 id,我正在使用 mail::outlook。
      • 当然。我建议您练习它以获得更全面的理解,并通过非常简单的示例省略它。欢呼! :)
      猜你喜欢
      • 2014-10-22
      • 1970-01-01
      • 2013-01-17
      • 2011-12-13
      • 1970-01-01
      • 2022-01-26
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多