Индексирование непосредственно в возвращаемый массив в Perl - PullRequest
16 голосов
/ 01 июля 2010

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

Например:

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

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

Ответы [ 2 ]

26 голосов
/ 01 июля 2010

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

my $a = (split /,/, $comma_separated)[0];
8 голосов
/ 01 июля 2010

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

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

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

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

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

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

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