[bcn-pm] regexp dinamico

Xavier Pegenaute xpegenauteatelepolis.es
Div Jul 6 03:04:28 PDT 2007


Creo que me gusta más la solución que he encontrado, aunque esta me la 
apunto, nunca se sabe.

Gracias!
Xavi.
Xavier Noria wrote:
> On Jul 5, 2007, at 3:40 PM, Xavier Pegenaute wrote:
>
>   
>> linea_1_del_cfg: regexp:"^(\d+)\s+(\d+)\s+(Test1)"     grupos:"$2: 
>> $1:$3"
>> linea_2_del_cfg: regexp:"^(\d+)\s+(\d+)\s+(Test2)"     grupos:"$3: 
>> $2:$1"
>>
>> Para hacer el matching no tengo problema porque pongo directamente la
>> cadena entre los m/.../, el problema viene con los grupos, por que al
>> leerlo y ponerlo en una variable, obviamente no hace lo que yo  
>> quiero :-):
>>
>>     if($linea =~ m/$matching/){
>>         $datos = $varlocal
>>     }
>>
>> Como podría solucionarlo?
>>     
>
> La situacion ahi es que tienes el nombre de las variables y necesitas  
> acceder a ellas en runtime. Afortunadamente son globales y ello es  
> posible si strict refs esta deshabilitado:
>
>    fxnafeynman:~/tmp$ cat foo.pl
>    use strict;
>    use warnings;
>
>    my @groups = '$2:$1:$3' =~ /\d/g; # extract digits
>    "foo" =~ /(.)(.)(.)/;
>    foreach my $g (@groups) {
>        no strict 'refs';
>        print $$g, "\n";
>    }
>    fxnafeynman:~/tmp$ perl foo.pl
>    o
>    f
>    o
>
> Estas se llaman symbolic o soft references en argot (documentadas en  
> perlref), y estan desaconsejadas en general porque suelen indicar que  
> necesitas una tabla hash en realidad, pero en este caso su uso parece  
> lo adecuado.
>
> -- fxn
>
> _______________________________________________
> llista dels Barcelona-pm
> Barcelona-pmapm.org
> http://mail.pm.org/mailman/listinfo/barcelona-pm
> BCN Perl Mongers: http://barcelona.pm.org
>   



Més informació de la llista de correu Barcelona-pm