首页 > 解决方案 > 处理 Perl 子例程的多个参数

问题描述

正如我所读到的,“这个子例程还有另一个问题。这个子例程只有在恰好用两个调用时才能正常工作

多余的参数被忽略——因为子程序从不查看$_[2]

但是当我传递多个参数时它的工作,所以我无法得出上述陈述,所以任何人都可以帮助我解决这个问题。

 sub privacy{
     $_[0]+$_[1]+$_[2]+$_[3];
 }

 $x=&privacy(3,4,5,6);
 print $x,"\n";`

预期的:

7

实际的:

18

但这个结果是矛盾的。

标签: perl

解决方案


我认为您正在阅读Learning Perl。我们提出了一个查找两个参数的最大值的子程序。它看起来像这样:

sub max {
    if( $_[0] > $_[1] ) { ... }
    else { $_[0] }
    }

如果你用两个参数调用它,它会起作用:

max( 1, 2 )
max( 5, 6 )
max( 9, 0 )

如果您使用三个参数调用它,则该特定子例程将忽略第三个参数,因为该特定子例程仅查看前两个:

max( 1, 2, 3 )   # ignores 3, so returns 2

您可以编写一些其他子程序来查看更多参数,但这是一个不同的子程序。

除非你另外告诉 Perl(我将在这里忽略它),它会接受尽可能多的参数,并且它们都显示在特殊变量@_中。你如何使用它取决于你。


推荐阅读