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

Luis Motta Campos luismottacampos at yahoo.co.uk
Tue Mar 23 10:24:06 PDT 2010


Flávio R. Lopes wrote:
> Blz Solli e Nelson....acho que deu pra entender!
> 
> É que no livro aparece o seguinte exemplo que me deixou em dúvida:
> 
> @rocks = qw( talc quartz jade obsidian );
> print "How many rocks do you have?\n";
> print "I have ", @rocks, " rocks!\n";        # WRONG, prints names of rocks
> print "I have ", scalar @rocks, " rocks!\n"; # Correct, gives a number
> 
> Então se eu utilizasse a penultima linha, eu estaria retornando um
> Contexto de Lista (pois me traria a lista dos nomes das pedras)
> Já na última, estou forçando "@rocks" a me retornar um valor escalar, ou
> seja, esta linha é um Contexto Escalar! (pois me retorna o número de
> elementos que tenho no meu array)
> 
> É isso mesmo?

Quase. Você está confuso, ainda, sobre o que é "contexto". Contexto quer
dizer "o que está em volta, o que dá sentido".

Contexto de lista é (entre outras coisas) uma chamada de função:

my_example_function(
  qw( tudo aqui dentro tem contexto de lista ), @inclusive, #$isso
);

( contexto, de, lista, claro );

[ qw{ tudo dentro de '[' e ']' está em contexto de lista ];

{ aqui => 'também', é => 'tudo', contexto => 'de lista' };

Contexto escalar é mais restritivo:

scalar @lista; # contexto escalar "na marra"

$escalar = @lista; # contexto escalar "explícito"

$hash{ CHAVE } = $valor; # qual é o contexto em que "CHAVE" está?

Lição de casa: existem mais contextos que apenas "lista" e "escalar".
Eles são 5 no total. Encontre-os e leia sobre eles. Pontos extras (e uma
rodada de cerveja paga por mim) se você postar o que encontrar aqui.


Putamplexos
-- 
Luis Motta Campos is a DBA,
Perl Programmer, foodie and photographer.


More information about the SaoPaulo-pm mailing list