Language ReferenceNamespace for Perl's core routinesDaftar Isi NAMECORE - Namespace for Perl's core routines 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
- BEGIN { *shove = \&CORE::push; }
- shove @array, 1,2,3;# pushes on to @array
DESCRIPTIONThe CORE namespace gives access to the original built-in functions ofPerl. The CORE package is built intoPerl, and therefore you do not need to use orrequire a hypothetical "CORE" module prior to accessing routines in thisnamespace. A list of the built-in functions in Perl can be found in perlfunc. For all Perl keywords, a CORE:: prefix will force the built-in functionto be used, even if it has been overridden or would normally require thefeature pragma. Despite appearances, this has nothing to do with theCORE package, but is part of Perl's syntax. For many Perl functions, the CORE package contains real subroutines. Thisfeature is new in Perl 5.16. You can take references to these and makealiases. However, some can only be called as barewords; i.e., you cannotuse ampersand syntax (&foo ) or call them through references. See theshove example above. These subroutines exist for all overridablekeywords, except for dump and the infix operators. Calling withampersand syntax and through references does not work for the followingfunctions, as they have special syntax that cannot always be translatedinto a simple list (e.g., eof vs eof() ): chdir , chomp , chop , each , eof , exec , keys , lstat ,pop , push , shift , splice , stat , system , truncate ,unlink , unshift , values
OVERRIDING CORE FUNCTIONSTo override a Perl built-in routine with your own version, you need toimport it at compile-time. This can be conveniently achieved with thesubs pragma. This will affect only the package in which you've importedthe said subroutine: - use subs 'chdir';
- sub chdir { ... }
- chdir $somewhere;
To override a built-in globally (that is, in all namespaces), you need toimport your function into the CORE::GLOBAL pseudo-namespace at compiletime: - BEGIN {
- *CORE::GLOBAL::hex = sub {
- # ... your code here
- };
- }
The new routine will be called whenever a built-in function is calledwithout a qualifying package: - print hex("0x50"),"\n";# prints 1
In both cases, if you want access to the original, unaltered routine, usethe CORE:: prefix: - print CORE::hex("0x50"),"\n";# prints 80
AUTHORThis documentation provided by Tels <[email protected]> 2007. SEE ALSOperlsub, perlfunc. |