use subs
permite la sustitución
de un operador en el ámbito de un paquete.
Si se quiere sustituir cualquier referencia (desde el
paquete o fuera de él) al operador
por la nueva versión es necesario declarar la
nueva versión dentro del paquete CORE::GLOBAL :
$ perl -e 'BEGIN { *CORE::GLOBAL::system = sub { print "hello $_[0]\n" } } system "foo"' hello fooSigue un ejemplo en el que reeemplazamos gobalmente el operador
glob
:
lhp@nereida:~/Lperl/src$ cat -n coreglob.pl 1 #!/usr/local/bin/perl -w 2 package Tutu; 3 use strict; 4 5 { 6 no warnings; 7 *CORE::GLOBAL::glob = sub { 8 my $regexp = shift; 9 10 opendir my $DIR, "." or die "$!"; 11 my @files = grep /$regexp/, readdir $DIR; 12 close($DIR); 13 return @files; 14 }; 15 } 16 1; 17 18 package main; 19 use strict; 20 21 sub tutu { 22 my @a = glob('^.[cd][ba].*\.pl'); 23 local $" = "\n"; 24 return "@a\n"; 25 } 26 27 print "---------main-----------\n"; 28 print tutu;ahora la llamada en el paquete
main
a glob
encuentra la nueva versión:
lhp@nereida:~/Lperl/src$ coreglob.pl ---------main----------- idbetcurly.pl pcap.pl scalar_sets.pl scalar_sets2.pl sdbm.pl sdbm2.pl
Casiano Rodríguez León