[SP-pm] Dúvida entre Scalar Context e List Context

Nelson Ferraz nferraz at gmail.com
Mon Mar 22 03:04:57 PDT 2010


2010/3/22 Solli Honorio <shonorio em gmail.com>:
> Sempre é um prazer ajudar, mas para isto é importante ficar claro qual a tua
> dúvida ? Em que situação você fica confuso com algum conceito ? E tente
> explicar o que você entendeu para que possamos saber qual o nível de
> informação você procura !

Como diz o Eric S. Raymond, no mundo dos hackers, o tipo de respostas
que você obtém para suas questões técnicas depende bastante da forma
que você faz as perguntas.

Quanto ao conceito de contexto, é bem simples.

my @list = (1..10);
sub get_list {
    if (wantarray) {
        return @list;
    } else {
        my $item = shift @list;
        return $item;
    }
}

No exemplo acima existem duas maneiras de se chamar get_list():

Contexto escalar:
my $a = get_list(); # => 1
my $b = get_list(); # => 2
my $c = get_list(); # => 3

Contexto de lista:
my @x = get_list(); # => (1..10)

Ou seja: o contexto é a forma como você chamou a subrotina -- você
está atribuindo o resultado para um escalar ou para uma lista?

Você frequentemente vai encontrar o wantarray dentro de um operador
ternário ("?"):

my @list = (1..10);
sub get_list {
    return wantarray ? @list : shift @list;
}

Sugestão de leitura:

http://www.perl.org.br/Artigos/SmartQuestionsHowTo


More information about the SaoPaulo-pm mailing list