Этот вопрос спросили о PHP и здесь и здесь, и у меня есть тот же вопрос для Perl. Учитывая функцию, которая возвращает список, там какой-либо путь (или каков лучший способ) сразу индексировать в него, не используя временную переменную?
Например:
my $comma_separated = "a,b,c";
my $a = split (/,/, $comma_separated)[0]; #not valid syntax
Я вижу, почему синтаксис во второй строке недопустим, таким образом, я задаюсь вопросом, существует ли способ получить тот же эффект без первого присвоения возвращаемого значения к списку и индексации от этого.
Просто используйте круглые скобки, чтобы определить свой список, а затем проиндексируйте его, чтобы получить желаемый элемент (ы):
my $a = (split /,/, $comma_separated)[0];
Также как вы можете сделать это:
($a, $b, $c) = @array;
Вы можете сделать это:
my($a) = split /,/, $comma_separated;
my $ a
в LHS (левая часть) обрабатывается как скалярный контекст. my ($ a)
- контекст списка. Это список из одного элемента, поэтому он получает только первый элемент, возвращенный из split
.
У него есть дополнительное преимущество в виде автоматического ограничения разделения, поэтому нет лишней работы, если $ comma_separated
большой.