Esta pergunta foi feita tanto sobre o PHP Aqui e Aqui, e eu tenho a mesma pergunta para Perl. Dada uma função que retorna uma lista, existe alguma maneira (ou qual é a melhor maneira) de indexar imediatamente sem usar uma variável temporária?
Por exemplo:
my $comma_separated = "a,b,c";
my $a = split (/,/, $comma_separated)[0]; #not valid syntax
Eu vejo por que a sintaxe na segunda linha é inválida, então estou me perguntando se há uma maneira de obter o mesmo efeito sem primeiro atribuir o valor de retorno a uma lista e indexar a partir disso.
Respostas:
25 para resposta № 1Basta usar parênteses para definir sua lista e, em seguida, indexá-la para obter o (s) elemento (s) desejado (s):
my $a = (split /,/, $comma_separated)[0];
8 para resposta № 2
Assim como você pode fazer isso:
($a, $b, $c) = @array;
Você consegue fazer isso:
my($a) = split /,/, $comma_separated;
my $a
no LHS (lado esquerdo) é tratado como contexto escalar. my($a)
é o contexto da lista. É uma lista de um único elemento, portanto, obtém apenas o primeiro elemento retornado de split
.
Ele tem o benefício adicional de limitar automaticamente a divisão, para que não haja perda de trabalho se $comma_separated
é grande.