Perl 优化:内联函数改变了结果

Perl optimization: inlining a function changed the results

我分析了一些代码,有一个函数很突出,我想知道是否有办法优化它:

函数定义为:

sub convert_arrayref {
   if(ref($_[0]) eq 'ARRAY') {
       return join(($_[1] || ","), @{$_[0]});
   }
   else {
     return $_[0];
   }
}

大多数时候 else 块都会被执行,我想知道我是否可以内联它而不是进行函数调用。调用代码如下所示:

$data = convert_arrayref($data, '&')

所以,我所做的是将调用代码更改为:

if ($data eq 'ARRAY') {
    $data = join('&', $data)
}

我认为这是等价的。但是,结果不同。我想知道我是否在这里做错了。

您得到不同的结果,因为您没有复制 if 子句的功能。您需要使用 ref 来检查您的变量是否为数组引用,并且您需要对变量进行引用:

if (ref($data) eq 'ARRAY') {
    $data = join('&', @{ $data })
}