Как мне превратить массив, возвращаемый из функции (например, split), в ссылку на массив?

#arrays #perl #reference

#массивы #perl #ссылка

Вопрос:

Рассмотрим этот код:

 @tmp = split(/s /, "apple banana cherry");
$aref = @tmp;
  

Помимо того, что приведенный выше код неэлегантен, он хрупкий. Допустим, я следую за ним с помощью этой строки:

 @tmp = split(/s /, "dumpling eclair fudge");
  

Теперь $$aref[1] вместо «банана» «эклер».

Как я могу избежать использования переменной temp?

Концептуально я думаю о чем-то вроде

 $aref = @{split(/s /, "apple banana cherry")};
  

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

1. Функции не могут возвращать массивы. split возвращает список скаляров, как и любой подраздел.

Ответ №1:

Вы могли бы сделать это, если вам нужен array-ref:

 my $aref = [ split(/s /, "apple banana cherry") ];
  

Ответ №2:

Я понял это:

 $aref = [split(/s /, "apple banana cherry")];
  

Ответ №3:

Хотя мне нравится ответ mu (и я бы сначала использовал этот подход здесь), имейте в виду, что переменные могут быть довольно легко ограничены, даже без использования функций, представьте:

 my $aref = do {
  my @temp = split(/s /, "apple banana cherry");
  @temp;
};
print join("-", @$aref), "n";
# with warnings: Name "main::temp" used only once: possible typo at ...
# with strict: Global symbol "@temp" requires explicit package name at ...
print join("-", @temp), "n";
  

Удачного кодирования.