【发布时间】:2012-12-05 19:57:38
【问题描述】:
给定示例代码:
foo(bar=>"test");
foo(bar=>["test"]);
sub foo {
my $args = {@_};
say ref($args->{bar});
say ref(\$args->{bar});
}
输出:
{预期为空白}
标量
阵列
参考文献
我想测试的是检查传递的是标量还是数组的最佳方法。比如:
given( ref($args->{bar}) ){
when "SCALAR" { }
when "ARRAY" { }
}
我可以连接这两种 ref 类型并执行 regex-when,但这效率低下。我也可以像下面这样测试它,但不确定这是否是首选:
if ( ref(\$args->{bar}) eq "SCALAR" ) { ... }
elsif ( ref( $args->{bar}) eq "ARRAY" ) { ... }
else { return; }
【问题讨论】:
-
我没有看到不做像
if (!ref $args->{bar}) { # scalar case } elsif ("ARRAY" eq ref $args->{bar}) { # handle array}这样简单的事情的令人信服的理由。 -
@MoritzBunkus:我认为这可能是要走的路。