perl - Perl 中的参数传递样式

标签 perl parameters

我看到人们使用两种样式在 Perl 中传递命名参数:

use strict;
use warnings;
use Data::Dumper;

sub foo {
    print Dumper @_;
}

sub bar {
    print Dumper @_;
}

foo( A => 'a', B => 'b' );
bar( { A => 'a', B => 'b' } );

使用有什么好处 foo() 样式而不是 酒吧()风格?

最佳答案

第二种方法传递对 hash 的引用,而第一种方法只传递一个列表。

这里有两个方面:理论上,就性能而言,对哈希的引用可能会更好,但对于短参数列表,这可以忽略不计。对于像 foo(a => 1, b => 2) 这样的简单电话没有性能差异,因为 @_实际上是原始值的别名。

但是如果调用者已经在一个散列中拥有这些值,那么第一种样式需要从散列转换为列表,然后再返回到散列,这可能会很慢。

第二个方面是谁负责转换为哈希的问题。第一种风格将它留在被调用的函数中,如果那样做 my %args = @_ ,如果参数列表不是偶数长度,它会产生奇怪的警告。

这就是为什么我稍微喜欢第二种风格(或者我使用 Perl 6,它本身支持命名参数)。

关于perl - Perl 中的参数传递样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3370422/

相关文章:

python - 为什么 Perl 和 Python 的 "\n"打印输出不同?

java - 将数据/字符串从 Maven 传递到 Java/JUnit 应用程序?

function - 用于定义/调用多参数函数的 ANTLR 语法

function - 将参数作为函数中的变量传递时后台会发生什么

types - 在 F# 中,如何将类型名称作为函数参数传递?

Perl 未初始化警告

xcode - 全新(干净)安装的 Lion 没有开发人员工具,Xcode 4.3 不再包含 make 和friends

python - 将 perl soap 应用程序移植到 python

java - 在 Linux (Centos/Redhat) 上自动化 Inline::Java 安装

java - 接受void的通用参数类型