[bcn-pm] regexp dinamico
Xavier Noria
fxnahashref.com
Dij Jul 5 08:12:33 PDT 2007
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
Més informació de la llista de correu Barcelona-pm