Perl优化问题:内联convert_arrayref函数后运行结果不一致
代码改写的错误点
- 引用类型判断逻辑错误
原函数中ref($_[0]) eq 'ARRAY'是调用ref函数获取变量的引用类型,判断输入是否为数组引用;你改写后的$data eq 'ARRAY'是直接将$data变量的值和字符串ARRAY做相等判断,二者逻辑完全不同,会导致数组引用的判断条件根本不会触发。 - 数组展开逻辑错误
原函数触发数组引用分支后,会先对数组引用解引用@{$_[0]}再传入join函数,会把数组内的所有元素用分隔符拼接;你改写后的代码直接把数组引用$data传入join,只会把引用的内存地址字符串(类似ARRAY(0xXXXXXX))当做单个元素处理,完全达不到拼接数组元素的效果。
正确的内联写法
if (ref($data) eq 'ARRAY') { $data = join('&', @{$data}); }
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

