我分析了一些代码,有一个函数很突出,我想知道是否有一种方法可以优化它:
该函数定义为:
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)
我认为这将是等效的。然而,结果却不同。我想知道我在这里是否做错了什么。
您会得到不同的结果,因为您没有复制该if子句的功能。您需要使用ref来检查变量是否是数组引用,并且需要引用该变量:
if (ref($data) eq 'ARRAY') {
$data = join('&', @{ $data })
}
Run Code Online (Sandbox Code Playgroud)