El Paquete CORE::GLOBAL

Como vimos en la sección 5.11 el pragma 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 foo
Sigue 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
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19