سؤال

لدي هذه القطعة

package AppOpt;
use Moose;

use namespace::autoclean;

with 'MooseX::Getopt';

has opt1  => (is => 'ro', isa => 'Str', required => 1);
has opt2  => (is => 'ro', isa => 'Bool', required => 1);

__PACKAGE__->meta->make_immutable;
1;

package main;
use strict;
use Data::Dumper;

my $cl = [qw( --opt1 OP1 --opt2 -- xxx yyy zzz)];
my $left = [];

my $opt = AppOpt->new_with_options( argv=>$cl, extra_argv => $left);

print Dumper(opt1 => $opt->opt1, opt2 => $opt->opt2, left => $left, cl => $cl);

الذي يعطيني هذا

$VAR1 = 'opt1';
$VAR2 = 'OP1';
$VAR3 = 'opt2';
$VAR4 = 1;
$VAR5 = 'left';
$VAR6 = [];
$VAR7 = 'cl';
$VAR8 = [
          '--opt1',
          'OP1',
          '--opt2',
          '--',
          'xxx',
          'yyy',
          'zzz'
        ];

كيف يمكنني الحصول على العناصر التي لم تتم معالجتها والتي لا تعتمد على الخيارات مثل xxx وyyy وzzz دون الحاجة إلى إعادة معالجة المصفوفة؟

هل كانت مفيدة؟

المحلول

ليست هناك حاجة لتعيين arrayref ل extra_argv.سيتم تعيين الوسائط الإضافية إلى arrayref هناك تلقائيًا.

use Data::Dumper;

my $opt = AppOpt->new_with_options(
    argv => [qw( --opt1 OP1 --opt2 -- xxx yyy zzz)]
);

print Dumper $opt->extra_argv;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top