Оптимизация Perl: вставка функции изменила результаты

#perl

Вопрос:

Я профилировал некоторый код, и есть одна функция, которая выделялась, и мне было интересно, есть ли способ ее оптимизировать:

Функция определяется как:

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

В большинстве случаев else блок будет выполняться, и мне было интересно, могу ли я встроить его, а не вызывать функцию. Код вызова выглядит следующим образом:

 $data = convert_arrayref($data, 'amp;')
 

Итак, я изменил код вызова следующим образом:

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

Я думал, что это будет равносильно. Однако результаты разные. Мне интересно, не сделал ли я здесь что-то не так.

Комментарии:

1. Вы можете сложить его в одну линию $data = join( 'amp;', @$data) if ref($data) eq 'ARRAY';

Ответ №1:

Вы получаете разные результаты, потому что вы не повторили функциональность if предложения. Вам нужно использовать ref, чтобы проверить, является ли ваша переменная ссылкой на массив, и вам нужно уважать переменную:

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