summaryrefslogtreecommitdiff
path: root/lib/CORE.pod
blob: b96c1de2d6e94deefd66a04a362fd878cd04ebb0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
=head1 NAME

CORE - Pseudo-namespace for Perl's core routines

=head1 SYNOPSIS

    BEGIN {
        *CORE::GLOBAL::hex = sub { 1; };
    }

    print hex("0x50"),"\n";			# prints 1
    print CORE::hex("0x50"),"\n";		# prints 80
    CORE::say "yes";				# prints yes

=head1 DESCRIPTION

The C<CORE> namespace gives access to the original built-in functions of
Perl.  It also provides access to keywords normally available
only through the L<feature> pragma.  There is no C<CORE>
package, and therefore you do not need to use or
require an hypothetical "CORE" module prior to accessing routines in this
namespace.

A list of the built-in functions in Perl can be found in L<perlfunc>.

=head1 OVERRIDING CORE FUNCTIONS

To override a Perl built-in routine with your own version, you need to
import it at compile-time. This can be conveniently achieved with the
C<subs> pragma. This will affect only the package in which you've imported
the said subroutine:

    use subs 'chdir';
    sub chdir { ... }
    chdir $somewhere;

To override a built-in globally (that is, in all namespaces), you need to
import your function into the C<CORE::GLOBAL> pseudo-namespace at compile
time:

    BEGIN {
        *CORE::GLOBAL::hex = sub {
            # ... your code here
        };
    }

The new routine will be called whenever a built-in function is called
without a qualifying package:

    print hex("0x50"),"\n";			# prints 1

In both cases, if you want access to the original, unaltered routine, use
the C<CORE::> prefix:

    print CORE::hex("0x50"),"\n";		# prints 80

=head1 AUTHOR

This documentation provided by Tels <nospam-abuse@bloodgate.com> 2007.

=head1 SEE ALSO

L<perlsub>, L<perlfunc>.

=cut