Как превратить массив, возвращаемый функцией (например, split), в ссылку на массив? - PullRequest
9 голосов
/ 07 ноября 2011

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

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

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

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

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

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

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

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

Ответы [ 3 ]

19 голосов
/ 07 ноября 2011

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

my $aref = [ split(/\s+/, "apple banana cherry") ];
3 голосов
/ 07 ноября 2011

Я понял это:

$aref = [split(/\s+/, "apple banana cherry")];
2 голосов
/ 07 ноября 2011

Хотя мне нравится ответ 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";

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...