参数传递给Perl子例程的顺序重要吗?

克雷格考菲尔德

参数传递给Perl子例程的顺序重要吗?当我调试以下代码时:

my $loopCounter = 1;
foreach(@authors) {

   my @splitAffiliations = splitAffiliations($params);
   my @foundItems = findAffiliationForAuthor($_, @splitAffiliations, $loopCounter);

   # Process @foundItems

   $loopCounter++;
}

...

sub findAffiliationForAuthor {

   my ($author, @affiliations, $aIndex) = @_;

   ...
} 

我发现该变量$loopCounter在子程序findAffiliationForAuthor被调用之前就具有一个值,但是在调用之后是未定义的。因此,该子例程接收到前两个参数的值,而接收不到第三个参数的值。但是,当我将参数的顺序更改为:

my @foundItems = findAffiliationForAuthor($loopCounter, $_, @splitAffiliations);

$loopCounter保留,并按预期方式通过了子例程。

看来我必须将所有标量变量放在数组变量之前,或者也许不混合使用。听起来对吗?

基思·汤普森(Keith Thompson)

当然,顺序很重要。

参数按照传递的顺序传递,并且数组参数被展到参数列表中。参数列表作为@_列表的内容出现在子例程中。

您实际上不能将数组作为参数传递;它的元素将被提取,并与其他任何参数一起推入列表。

您遇到的问题是因为您处理参数的方式:

my ($author, @affiliations, $aIndex) = @_;

$author@_按您的预期获取的第一个元素,但@affiliations将列表的其余所有内容都包含进去。undef然后将该值存储在中$aIndex

您可以将单个数组传递给子例程,只要它是最后一个参数即可:

my($first_scalar, $second_scalar, @array) = @_;

如果将多个数组传递给子例程:

foo(@array1, @array2);

两个数组的元素都被展平为一个列表,并且子例程无法知道哪个元素来自哪个数组参数。

您可以将引用传递给数组:

sub foo {
    my ($scalar1, $array_ref1, $scalar2, $array_ref2) = @_;
    # ...
}

然后这样称呼它:

foo(42, \@array1, $some_scalar, \@array2);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

参数传递给Perl子例程的顺序重要吗?

来自分类Dev

将大量参数传递给Perl子例程还是?

来自分类Dev

Perl:修改作为参数传递给子例程的变量

来自分类Dev

将参数传递给Perl类子例程

来自分类Dev

将子例程传递给Perl子例程

来自分类Dev

将参数从另一个模块perl传递给子例程

来自分类Dev

Perl:CGI模块-将param()作为参数传递给子例程

来自分类Dev

URL中命名参数的顺序重要吗?

来自分类Dev

const,var,out参数的顺序重要吗?

来自分类Dev

Perl-将数组传递给子例程

来自分类Dev

Perl:传递给子例程的数组的打印名称

来自分类Dev

Perl:如何访问传递给子例程的哈希数组

来自分类Dev

FORTRAN:将伪参数传递给子例程

来自分类Dev

将工作表作为参数传递给子例程

来自分类Dev

如何将多个参数传递给子例程?

来自分类Dev

FORTRAN:将伪参数传递给子例程

来自分类Dev

将Perl数组取消引用作为参数传递给子例程时,它无法正常工作

来自分类Dev

将Perl数组取消引用作为参数传递给子例程时,它无法正常工作

来自分类Dev

如何将参数传递给从其他子例程调用的引用子例程

来自分类Dev

命令顺序重要吗?

来自分类Dev

隐式参数的顺序在Scala中重要吗?

来自分类Dev

将工作表传递给子例程

来自分类Dev

Fortran将数字传递给子例程

来自分类Dev

将散列传递给子例程

来自分类Dev

将数组传递给Perl length子例程时会发生什么?

来自分类Dev

将数组,标量和哈希传递给Perl中的子例程

来自分类Dev

将正则表达式传递给perl子例程

来自分类Dev

Perl + Tk:将(滚动/列表框)小部件引用传递给子例程

来自分类Dev

将数组,标量和哈希传递给Perl中的子例程

Related 相关文章

热门标签

归档