This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Mention the two ways of overriding built-ins.
[perl5.git] / lib / CORE.pod
CommitLineData
c8472d06
T
1=head1 NAME
2
1694bc13 3CORE - 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
16The C<CORE> namespace gives access to the original built-in functions of
17Perl. There is no C<CORE> package, and therefore you do not need to use or
18require an hypothetical "CORE" module prior to accessing routines in this
19namespace.
c8472d06 20
1694bc13 21A 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
25To override a Perl built-in routine with your own version, you need to
26import it at compile-time. This can be conveniently achieved with the
27C<subs> pragma. This will affect only the package in which you've imported
28the said subroutine:
c8472d06 29
1694bc13
RGS
30 use subs 'chdir';
31 sub chdir { ... }
32 chdir $somewhere;
c8472d06 33
1694bc13
RGS
34To override a built-in globally (that is, in all namespaces), you need to
35import your function into the C<CORE::GLOBAL> pseudo-namespace at compile
36time:
37
38 BEGIN {
39 *CORE::GLOBAL::hex = sub {
40 # ... your code here
41 };
42 }
43
44The new routine will be called whenever a built-in function is called
c8472d06
T
45without a qualifying package:
46
1694bc13 47 print hex("0x50"),"\n"; # prints 1
c8472d06 48
1694bc13
RGS
49In both cases, if you want access to the original, unaltered routine, use
50the C<CORE::> prefix:
c8472d06 51
1694bc13 52 print CORE::hex("0x50"),"\n"; # prints 80
c8472d06
T
53
54=head1 AUTHOR
55
1694bc13 56This documentation provided by Tels <nospam-abuse@bloodgate.com> 2007.
c8472d06
T
57
58=head1 SEE ALSO
59
1694bc13 60L<perlsub>, L<perlfunc>.
c8472d06
T
61
62=cut