【发布时间】:2012-08-09 04:16:19
【问题描述】:
我刚开始使用 Perl(大约 15 分钟前)使用在线教程。我做了一个小子程序来测试一些 Perl 特性,并想知道是否可以在运行时确定传递给 sub' 调用的参数是数组还是标量。以我写的sub为例:
#!/usr/bin/perl
sub somme_prod {
if (scalar(@_) > 1) {
$facteur = shift(@_);
foreach my $nb (@_) {
$resultat += $nb
}
return ($resultat * $facteur);
}
else {
return "ERREUR";
}
}
print somme_prod(2, 2, 3, 7);
这是一个基本的 sum-product 子例程,其功能完全符合其名称。现在,是否可以修改此子例程以允许像这样混合使用数组和标量?
somme_prod(2, (2,3), 7);
somme_prod(2, (2,3,7));
#...
此外,欢迎对此处演示的 Perl 编码风格发表任何评论非常。我有业余 C++ 编码的背景,所以我可能不会考虑 Perl。
编辑:我很抱歉。实际上,我在发布后尝试过,似乎 Perl 确实按照我的意愿处理了我的 sub。现在我想我的问题会是“Perl 如何知道如何处理这个”?
为更接近 Perl 的版本编辑了代码。
【问题讨论】:
-
只是关于样式的说明,在 Perl 中,使用
foreach my $thing( @things ) { ... }来循环数组会更好。 -
这是我最初的想法,但这使得很难区分要求和的值和因子(它始终是第一个值),除非有我不知道的技巧。
-
我发现 foreach 有一种变体,它可以将变量转换为索引,从而有效地创建了一个更短且更易于阅读的循环:foreach my $i (1 .. $#_)
-
为了澄清,只有标量列表可以传入和传出 Perl 子例程;数组不能传递。请参阅Passing arrays to functions in perl 中的ikegami's 讨论。
-
感谢您的澄清!
标签: arrays perl subroutine