[Madrid-pm] Can't modify push in scalar assignment

Salvador Fandiño sfandino en yahoo.com
Mar Oct 30 05:46:06 PDT 2007


la causa es la prioridad de los operadores,

  defined $args{$k}
      ?    push @{ $args{$k} }, $v
      :    $args{$k} = [ $v ];

equivale a:

  ( defined $args{$k}
        ?    push @{ $args{$k} }, $v
        :    $args{$k} )
      = [ $v ];


y tu lo que quieres es:

  defined $args{$k}

      ?    push @{ $args{$k} }, $v

      :    ($args{$k} = [ $v ]);



en perlop aparece una tabla con las prioridades de todos los operadores de Perl

- Salva

----- Original Message ----
From: Bruno <brunorc en gmail.com>
To: Lista de correo de Madrid Perl Mongers <madrid-pm en pm.org>
Sent: Tuesday, October 30, 2007 1:39:49 PM
Subject: [Madrid-pm] Can't modify push in scalar assignment


Hola todos

Quería usar el operator "? :" para ésta operación:

defined $args{$k}
    ?    push @{ $args{$k} }, $v
    :    $args{$k} = [ $v ];

pero me sale el error "Can't modify push in scalar assignment".


Lo que es interesante, es que la forma:

if ( defined $args{$k} ) {

    push @{ $args{$k} }, $v;
}
else {

    $args{$k} = [ $v ];
}


funciona bien, tambien la construcción:

defined $args{$k} and push @{ $args{$k} }, $v or $args{$k} = [ $v ];

(sí, es una forma muy rara).

Algunas ideas?

Saludos, Bruno






__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://mail.pm.org/pipermail/madrid-pm/attachments/20071030/c92f950d/attachment.html 


Más información sobre la lista de distribución Madrid-pm