Commit | Line | Data |
---|---|---|
c8472d06 T |
1 | =head1 NAME |
2 | ||
1694bc13 | 3 | CORE - Pseudo-namespace for Perl's core routines |
c8472d06 T |
4 | |
5 | =head1 SYNOPSIS | |
6 | ||
1694bc13 RGS |
7 | BEGIN { |
8 | *CORE::GLOBAL::hex = sub { 1; }; | |
9 | } | |
c8472d06 | 10 | |
1694bc13 RGS |
11 | print hex("0x50"),"\n"; # prints 1 |
12 | print CORE::hex("0x50"),"\n"; # prints 80 | |
c8472d06 T |
13 | |
14 | =head1 DESCRIPTION | |
15 | ||
1694bc13 RGS |
16 | The C<CORE> namespace gives access to the original built-in functions of |
17 | Perl. There is no C<CORE> package, and therefore you do not need to use or | |
18 | require an hypothetical "CORE" module prior to accessing routines in this | |
19 | namespace. | |
c8472d06 | 20 | |
1694bc13 | 21 | A list of the built-in functions in Perl can be found in L<perlfunc>. |
c8472d06 T |
22 | |
23 | =head1 OVERRIDING CORE FUNCTIONS | |
24 | ||
1694bc13 RGS |
25 | To override a Perl built-in routine with your own version, you need to |
26 | import it at compile-time. This can be conveniently achieved with the | |
27 | C<subs> pragma. This will affect only the package in which you've imported | |
28 | the said subroutine: | |
c8472d06 | 29 | |
1694bc13 RGS |
30 | use subs 'chdir'; |
31 | sub chdir { ... } | |
32 | chdir $somewhere; | |
c8472d06 | 33 | |
1694bc13 RGS |
34 | To override a built-in globally (that is, in all namespaces), you need to |
35 | import your function into the C<CORE::GLOBAL> pseudo-namespace at compile | |
36 | time: | |
37 | ||
38 | BEGIN { | |
39 | *CORE::GLOBAL::hex = sub { | |
40 | # ... your code here | |
41 | }; | |
42 | } | |
43 | ||
44 | The new routine will be called whenever a built-in function is called | |
c8472d06 T |
45 | without a qualifying package: |
46 | ||
1694bc13 | 47 | print hex("0x50"),"\n"; # prints 1 |
c8472d06 | 48 | |
1694bc13 RGS |
49 | In both cases, if you want access to the original, unaltered routine, use |
50 | the C<CORE::> prefix: | |
c8472d06 | 51 | |
1694bc13 | 52 | print CORE::hex("0x50"),"\n"; # prints 80 |
c8472d06 T |
53 | |
54 | =head1 AUTHOR | |
55 | ||
1694bc13 | 56 | This documentation provided by Tels <nospam-abuse@bloodgate.com> 2007. |
c8472d06 T |
57 | |
58 | =head1 SEE ALSO | |
59 | ||
1694bc13 | 60 | L<perlsub>, L<perlfunc>. |
c8472d06 T |
61 | |
62 | =cut |