كيف يمكنني ضبط القيم الافتراضية باستخدام Getopt :: الأمراض المنقولة جنسيا؟

StackOverflow https://stackoverflow.com/questions/1609060

  •  05-07-2019
  •  | 
  •  

سؤال

واني اسعى الى جمع القيم من سطر الأوامر باستخدام 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";
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top