getOpt :: std를 사용하여 기본값을 설정하려면 어떻게해야합니까?
문제
나는 명령 줄에서 값을 수집하려고합니다. getopt :: std 내 perl 스크립트에서.
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;
여기서 처음 두 변수 ($ inputfile, $ outputfile)는 필수이지만 마지막 변수 ($ parameter_value)는 선택 사항이며 무시할 수 있습니다.
나는 기본적으로 마지막 변수 ($ parameter_value)에 약간의 값을 설정하려고합니다. -p
명령 줄에서 플래그가 무시됩니다.
나는 이것을 사용했다 :
my $parameter_value = our $opt_p || "20";
여기에서 -p 플래그가 명령 줄에서 무시 될 때 올바른 값을 전달합니다. 그러나 문제는 명령 줄 (예 : -p 58)에서 약간의 값을 제공 할 때, 명령 줄에서 전달한 58 대신 동일한 값 20이 프로그램에 전달됩니다.
내가 여기서 저지르는 실수를 지적하여 나를 도와 줄 수 있습니까?
고맙습니다.
해결책
#/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;
C:\Temp> ks -iinput -ooutput -p55 input output 55
C:\Temp> ks -iinput -ooutput input output 20
다른 팁
가장 좋은 점은 사용하는 것입니다 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;
GetOpts를 호출하기 전에 OPT 변수를 기본값으로 설정하는 것이 좋습니다. 또한 사용 메시지에 $ OPT_ 변수를 사용하여 기본값을 표시 할 수 있습니다.
use Getopt::Std;
$Getopt::Std::STANDARD_HELP_VERSION = 1;
our $opt_p = 20;
sub HELP_MESSAGE { print " -p parameter value (default $opt_p)\n"; }
getopts('i:o:p:');
my $inputfile = our $opt_i;
my $outputfile = our $opt_o;
my $parameter_value = our $opt_p;
#/usr/bin/perl
use strict;
use warnings;
use Getopt::Std;
$Getopt::Std::STANDARD_HELP_VERSION = 1;
my %opts = ();
getopts('i:o:p:', \%opts);
my $inputfile = $opts{i};
my $outputfile = $opts{o};
my $parameter_value = $opts{p} || "20";
print "$inputfile, $outputfile, $parameter_value\n";
제휴하지 않습니다 StackOverflow