我试图在我的Perl脚本中使用Getopt :: Std从命令行收集值.
use Getopt::Std;
$Getopt::Std::STANDARD_HELP_VERSION = 1;
getopts('i:o:p:');
my $inputfile = our $opt_i;
my $outputfile = our $opt_o;
my $parameter_value = our $opt_p;
Run Code Online (Sandbox Code Playgroud)
这里前两个变量($ inputfile,$ outputfile)是必需的,但最后一个变量($ parameter_value)是可选的,可以忽略.
我试图-p在命令行忽略该标志时默认将一些值设置为最后一个变量($ parameter_value).
我试过用这个:
my $parameter_value = our $opt_p || "20";
Run Code Online (Sandbox Code Playgroud)
在命令行中忽略-p标志时,它传递正确的值.但问题是当我从命令行提供一些值时(例如-p 58),相同的值20被传递给程序而不是我从命令行传递的58.
能否指出我在这里犯的错误,请你帮帮我吧?
谢谢.
DVK*_*DVK 17
最好的方法是使用GetOpt :: Long并使用哈希而不是单个变量.然后,您可以通过预填充数组来传递默认值
use Getopt::Long;
my %opts = (parameter => 20);
GetOptions( \%opts,
'p|parameter=i',
'o|outputfile=s',
'i|inputfile=s'
) or die "Invalid parameters!";
# I didn't bother cloning STANDARD_HELP_VERSION = 1;
Run Code Online (Sandbox Code Playgroud)
Sin*_*nür 16
#/usr/bin/perl
use strict;
use warnings;
use Getopt::Std;
getopts('i:o:p:');
our($opt_i, $opt_o, $opt_p);
my $inputfile = $opt_i;
my $outputfile = $opt_o;
my $parameter_value = $opt_p || "20";
print "$_\n" for $inputfile, $outputfile, $parameter_value;
Run Code Online (Sandbox Code Playgroud)
C:\Temp> ks -iinput -ooutput -p55 input output 55
C:\Temp> ks -iinput -ooutput input output 20