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

Luc*_*uca 4 perl

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

该函数定义为:

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

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

$data = convert_arrayref($data, '&')
Run Code Online (Sandbox Code Playgroud)

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

if ($data eq 'ARRAY') {
    $data = join('&', $data)
}
Run Code Online (Sandbox Code Playgroud)

我认为这将是等效的。然而,结果却不同。我想知道我在这里是否做错了什么。

too*_*lic 5

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

if (ref($data) eq 'ARRAY') {
    $data = join('&', @{ $data })
}
Run Code Online (Sandbox Code Playgroud)