Индексирование непосредственно в возвращенный массив в Perl

Этот вопрос был задан о PHP как здесь и здесь, и у меня есть тот же вопрос для Perl. Учитывая функцию, которая возвращает список, есть ли способ (или лучший способ) немедленно индексировать его без использования временной переменной?

Например:

my $comma_separated = "a,b,c";
my $a = split (/,/, $comma_separated)[0]; #not valid syntax

Я понимаю, почему синтаксис во второй строке недействителен, поэтому мне интересно, есть ли способ получить тот же эффект без первоначального присвоения возвращаемого значения списку и индексации из него.

Ответы

Ответ 1

Просто используйте круглые скобки, чтобы определить свой список, а затем проиндексируйте его, чтобы вытащить нужный элемент (ы):

my $a = (split /,/, $comma_separated)[0];

Ответ 2

Как вы можете это сделать:

($a, $b, $c) = @array;

Вы можете сделать это:

my($a) = split /,/, $comma_separated;

my $a на LHS (левая сторона) рассматривается как скалярный контекст. my($a) - это контекст списка. Его единственный список элементов, поэтому он получает только первый элемент, возвращенный из split.

У этого есть дополнительное преимущество автоматического ограничения разделения, поэтому нет никакой расточительной работы, если $comma_separated велико.