كيف يمكنني ضبط القيم الافتراضية باستخدام Getopt :: الأمراض المنقولة جنسيا؟
سؤال
واني اسعى الى جمع القيم من سطر الأوامر باستخدام Getopt :: الأمراض المنقولة جنسيا في بلدي المخطوطة.
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)، يتم تمرير نفس القيمة 20 إلى البرنامج بدلا من 58 التي مررت من سطر الأوامر.
هل يمكنك مساعدتي من فضلك بها مشيرا الأخطاء وأنا على صنع هنا؟
وشكرا لكم.
المحلول
#/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 :: طويل و استخدام التجزئة بدلا من المتغيرات الفردية. ثم يمكنك تمرير القيم الافتراضية لما قبل ملء مجموعة
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_ $ في رسالة استخدامك لإظهار القيم الافتراضية.
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";