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 })
}
我分析了一些代码,有一个函数很突出,我想知道是否有办法优化它:
函数定义为:
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 })
}