#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";
Удачного кодирования.