子例程的参数在数组中传递。看起来您已经意识到,当您在@args
.
如果您的子例程只需要参数的参数列表,那么您的方法存在一些问题。
首先,正如您所意识到的,如果您将一个空数组推送到一个数组上,您将不会将任何项目添加到您的@args
数组中。这会混淆你的子程序。使用 Data::Dumper 进行测试非常简单。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Data::Dumper;
my @arguments = ('Arg1');
my @controller;
my @member;
my @args;
push(@args, $arguments[0]);
push(@args, @controller);
push(@args, @member);
say Dumper \@args;
输出如下所示:
$ ./args
$VAR1 = [
'Arg1'
];
但你也有相反的问题。如果@controller
或@member
包含多个元素,那么您的参数数组会因为其中包含太多而变得混乱。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Data::Dumper;
my @arguments = ('Arg1');
my @controller = ('C1', 'C2');
my @member = ('M1', 'M2');
my @args;
push(@args, $arguments[0]);
push(@args, @controller);
push(@args, @member);
say Dumper \@args;
这使:
$ ./args2
$VAR1 = [
'Arg1',
'C1',
'C2',
'M1',
'M2'
];
这两个问题的解决方案是相同的。如果您只需要 and 中的一个元素,则要求精确一个@controller
元素@member
。如果太少,那么你会undef
在数组中得到一个,如果太多,那么你会得到第一个。
空数组:
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Data::Dumper;
my @arguments = ('Arg1');
my @controller;
my @member;
my @args;
push(@args, $arguments[0]);
push(@args, $controller[0]);
push(@args, $member[0]);
say Dumper \@args;
这使:
$ ./args3
$VAR1 = [
'Arg1',
undef,
undef
];
过满的数组:
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Data::Dumper;
my @arguments = ('Arg1');
my @controller = ('C1', 'C2');
my @member = ('M1', 'M2');
my @args;
push(@args, $arguments[0]);
push(@args, $controller[0]);
push(@args, $member[0]);
say Dumper \@args;
这使:
$ ./args4
$VAR1 = [
'Arg1',
'C1',
'M1'
];
这有帮助吗?