summaryrefslogtreecommitdiff
path: root/lib/CORE.pod
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2011-08-06 00:20:06 -0700
committerFather Chrysostomos <sprout@cpan.org>2011-08-14 12:23:30 -0700
commit4aaa475724fbbc4ab2427743fa4d07a12e6ce0d9 (patch)
treed179695a33037243c65c51f5373eaa5a8c95931d /lib/CORE.pod
parent9927957a90b2fe6bdb0e2be889b2edcddadea174 (diff)
downloadperl-4aaa475724fbbc4ab2427743fa4d07a12e6ce0d9.tar.gz
Add inlinable &CORE::functions
This commit allows this to work: BEGIN { *entangle = \&CORE::tie }; entangle $foo, $package; And the entangle call gets inlined as a tie op, the resulting op tree being indistinguishable. These subs are not yet callable via &foo syntax or through a refer- ence. That will come later, except for some functions, like sort(), which will probably never support it. Almost all overridable functions are supported. These few are not: - infix operators - not and getprotobynumber (can’t get the precedence right yet; prototype problem) - dump Subsequent commits (hopefully!) will deal with those. How this works: gv_fetchpvn_flags is extended with hooks to create subs inside the CORE package. Those subs are XSUBs (whose C function dies with an error, for now at least) with a call checker that blows away the entersub op and replaces it with whatever op the sub represents. This is slightly inefficient right now, as gv_fetchpvn_flags calls keyword(), only to have core_prototype call it again. That will be fixed in a future refactoring.
Diffstat (limited to 'lib/CORE.pod')
-rw-r--r--lib/CORE.pod22
1 files changed, 18 insertions, 4 deletions
diff --git a/lib/CORE.pod b/lib/CORE.pod
index b96c1de2d6..d2175eb56c 100644
--- a/lib/CORE.pod
+++ b/lib/CORE.pod
@@ -1,6 +1,6 @@
=head1 NAME
-CORE - Pseudo-namespace for Perl's core routines
+CORE - Namespace for Perl's core routines
=head1 SYNOPSIS
@@ -12,17 +12,31 @@ CORE - Pseudo-namespace for Perl's core routines
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
+
=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
+Perl. The C<CORE> package is built into
+Perl, 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>.
+For all Perl keywords, a C<CORE::> prefix will force the built-in function
+to be used, even if it has been overridden or would normally require the
+L<feature> pragma. Despite appearances, this has nothing to do with the
+CORE package, but is part of Perl's syntax.
+
+For many Perl functions, the CORE package contains real subroutines. This
+feature is new in Perl 5.16. You can take references to these and make
+aliases. However, they can only be called as barewords; i.e., you cannot
+use ampersand syntax (C<&foo>) or call them through references. See the
+C<shove> example above. This works for all overridable keywords, except
+for C<dump>, C<getprotobynumber>, C<not> and the infix operators.
+
=head1 OVERRIDING CORE FUNCTIONS
To override a Perl built-in routine with your own version, you need to