← Index
NYTProf Performance Profile   « line view »
For webmerge/scripts/webmerge.pl
  Run on Mon Oct 7 02:42:42 2013
Reported on Mon Oct 7 03:03:21 2013

Filename/usr/lib64/perl5/5.16.0/feature.pm
StatementsExecuted 32 statements in 388µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111169µs169µsfeature::::__commonfeature::__common
11156µs225µsfeature::::importfeature::import
0000s0sfeature::::croakfeature::croak
0000s0sfeature::::unimportfeature::unimport
0000s0sfeature::::unknown_featurefeature::unknown_feature
0000s0sfeature::::unknown_feature_bundlefeature::unknown_feature_bundle
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# -*- buffer-read-only: t -*-
2# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
3# This file is built by regen/feature.pl.
4# Any changes made here will be lost!
5
6package feature;
7
814µsour $VERSION = '1.27';
9
10132µsour %feature = (
11 fc => 'feature_fc',
12 say => 'feature_say',
13 state => 'feature_state',
14 switch => 'feature_switch',
15 evalbytes => 'feature_evalbytes',
16 array_base => 'feature_arybase',
17 current_sub => 'feature___SUB__',
18 unicode_eval => 'feature_unieval',
19 unicode_strings => 'feature_unicode',
20);
21
22140µsour %feature_bundle = (
23 "5.10" => [qw(array_base say state switch)],
24 "5.11" => [qw(array_base say state switch unicode_strings)],
25 "5.15" => [qw(current_sub evalbytes fc say state switch unicode_eval unicode_strings)],
26 "all" => [qw(array_base current_sub evalbytes fc say state switch unicode_eval unicode_strings)],
27 "default" => [qw(array_base)],
28);
29
3014µs$feature_bundle{"5.12"} = $feature_bundle{"5.11"};
3112µs$feature_bundle{"5.13"} = $feature_bundle{"5.11"};
3212µs$feature_bundle{"5.14"} = $feature_bundle{"5.11"};
3312µs$feature_bundle{"5.16"} = $feature_bundle{"5.15"};
3412µs$feature_bundle{"5.9.5"} = $feature_bundle{"5.10"};
35
3612µsour $hint_shift = 26;
371800nsour $hint_mask = 0x1c000000;
3818µsour @hint_bundles = qw( default 5.10 5.11 5.15 );
39
40# This gets set (for now) in $^H as well as in %^H,
41# for runtime speed of the uc/lc/ucfirst/lcfirst functions.
42# See HINT_UNI_8_BIT in perl.h.
431800nsour $hint_uni8bit = 0x00000800;
44
45# TODO:
46# - think about versioned features (use feature switch => 2)
47
48=head1 NAME
49
50feature - Perl pragma to enable new features
51
52=head1 SYNOPSIS
53
54 use feature qw(say switch);
55 given ($foo) {
56 when (1) { say "\$foo == 1" }
57 when ([2,3]) { say "\$foo == 2 || \$foo == 3" }
58 when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" }
59 when ($_ > 100) { say "\$foo > 100" }
60 default { say "None of the above" }
61 }
62
63 use feature ':5.10'; # loads all features available in perl 5.10
64
65 use v5.10; # implicitly loads :5.10 feature bundle
66
67=head1 DESCRIPTION
68
69It is usually impossible to add new syntax to Perl without breaking
70some existing programs. This pragma provides a way to minimize that
71risk. New syntactic constructs, or new semantic meanings to older
72constructs, can be enabled by C<use feature 'foo'>, and will be parsed
73only when the appropriate feature pragma is in scope. (Nevertheless, the
74C<CORE::> prefix provides access to all Perl keywords, regardless of this
75pragma.)
76
77=head2 Lexical effect
78
79Like other pragmas (C<use strict>, for example), features have a lexical
80effect. C<use feature qw(foo)> will only make the feature "foo" available
81from that point to the end of the enclosing block.
82
83 {
84 use feature 'say';
85 say "say is available here";
86 }
87 print "But not here.\n";
88
89=head2 C<no feature>
90
91Features can also be turned off by using C<no feature "foo">. This too
92has lexical effect.
93
94 use feature 'say';
95 say "say is available here";
96 {
97 no feature 'say';
98 print "But not here.\n";
99 }
100 say "Yet it is here.";
101
102C<no feature> with no features specified will reset to the default group. To
103disable I<all> features (an unusual request!) use C<no feature ':all'>.
104
105=head1 AVAILABLE FEATURES
106
107=head2 The 'say' feature
108
109C<use feature 'say'> tells the compiler to enable the Perl 6 style
110C<say> function.
111
112See L<perlfunc/say> for details.
113
114This feature is available starting with Perl 5.10.
115
116=head2 The 'state' feature
117
118C<use feature 'state'> tells the compiler to enable C<state>
119variables.
120
121See L<perlsub/"Persistent Private Variables"> for details.
122
123This feature is available starting with Perl 5.10.
124
125=head2 The 'switch' feature
126
127C<use feature 'switch'> tells the compiler to enable the Perl 6
128given/when construct.
129
130See L<perlsyn/"Switch Statements"> for details.
131
132This feature is available starting with Perl 5.10.
133
134=head2 The 'unicode_strings' feature
135
136C<use feature 'unicode_strings'> tells the compiler to use Unicode semantics
137in all string operations executed within its scope (unless they are also
138within the scope of either C<use locale> or C<use bytes>). The same applies
139to all regular expressions compiled within the scope, even if executed outside
140it.
141
142C<no feature 'unicode_strings'> tells the compiler to use the traditional
143Perl semantics wherein the native character set semantics is used unless it is
144clear to Perl that Unicode is desired. This can lead to some surprises
145when the behavior suddenly changes. (See
146L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are
147potentially using Unicode in your program, the
148C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
149
150This feature is available starting with Perl 5.12; was almost fully
151implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>.
152
153=head2 The 'unicode_eval' and 'evalbytes' features
154
155Under the C<unicode_eval> feature, Perl's C<eval> function, when passed a
156string, will evaluate it as a string of characters, ignoring any
157C<use utf8> declarations. C<use utf8> exists to declare the encoding of
158the script, which only makes sense for a stream of bytes, not a string of
159characters. Source filters are forbidden, as they also really only make
160sense on strings of bytes. Any attempt to activate a source filter will
161result in an error.
162
163The C<evalbytes> feature enables the C<evalbytes> keyword, which evaluates
164the argument passed to it as a string of bytes. It dies if the string
165contains any characters outside the 8-bit range. Source filters work
166within C<evalbytes>: they apply to the contents of the string being
167evaluated.
168
169Together, these two features are intended to replace the historical C<eval>
170function, which has (at least) two bugs in it, that cannot easily be fixed
171without breaking existing programs:
172
173=over
174
175=item *
176
177C<eval> behaves differently depending on the internal encoding of the
178string, sometimes treating its argument as a string of bytes, and sometimes
179as a string of characters.
180
181=item *
182
183Source filters activated within C<eval> leak out into whichever I<file>
184scope is currently being compiled. To give an example with the CPAN module
185L<Semi::Semicolons>:
186
187 BEGIN { eval "use Semi::Semicolons; # not filtered here " }
188 # filtered here!
189
190C<evalbytes> fixes that to work the way one would expect:
191
192 use feature "evalbytes";
193 BEGIN { evalbytes "use Semi::Semicolons; # filtered " }
194 # not filtered
195
196=back
197
198These two features are available starting with Perl 5.16.
199
200=head2 The 'current_sub' feature
201
202This provides the C<__SUB__> token that returns a reference to the current
203subroutine or C<undef> outside of a subroutine.
204
205This feature is available starting with Perl 5.16.
206
207=head2 The 'array_base' feature
208
209This feature supports the legacy C<$[> variable. See L<perlvar/$[> and
210L<arybase>. It is on by default but disabled under C<use v5.16> (see
211L</IMPLICIT LOADING>, below).
212
213This feature is available under this name starting with Perl 5.16. In
214previous versions, it was simply on all the time, and this pragma knew
215nothing about it.
216
217=head2 The 'fc' feature
218
219C<use feature 'fc'> tells the compiler to enable the C<fc> function,
220which implements Unicode casefolding.
221
222See L<perlfunc/fc> for details.
223
224This feature is available from Perl 5.16 onwards.
225
226=head1 FEATURE BUNDLES
227
228It's possible to load multiple features together, using
229a I<feature bundle>. The name of a feature bundle is prefixed with
230a colon, to distinguish it from an actual feature.
231
232 use feature ":5.10";
233
234The following feature bundles are available:
235
236 bundle features included
237 --------- -----------------
238 :default array_base
239
240 :5.10 say state switch array_base
241
242 :5.12 say state switch unicode_strings array_base
243
244 :5.14 say state switch unicode_strings array_base
245
246 :5.16 say state switch unicode_strings
247 unicode_eval evalbytes current_sub fc
248
249The C<:default> bundle represents the feature set that is enabled before
250any C<use feature> or C<no feature> declaration.
251
252Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
253no effect. Feature bundles are guaranteed to be the same for all sub-versions.
254
255 use feature ":5.14.0"; # same as ":5.14"
256 use feature ":5.14.1"; # same as ":5.14"
257
258=head1 IMPLICIT LOADING
259
260Instead of loading feature bundles by name, it is easier to let Perl do
261implicit loading of a feature bundle for you.
262
263There are two ways to load the C<feature> pragma implicitly:
264
265=over 4
266
267=item *
268
269By using the C<-E> switch on the Perl command-line instead of C<-e>.
270That will enable the feature bundle for that version of Perl in the
271main compilation unit (that is, the one-liner that follows C<-E>).
272
273=item *
274
275By explicitly requiring a minimum Perl version number for your program, with
276the C<use VERSION> construct. That is,
277
278 use v5.10.0;
279
280will do an implicit
281
282 no feature ':all';
283 use feature ':5.10';
284
285and so on. Note how the trailing sub-version
286is automatically stripped from the
287version.
288
289But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
290
291 use 5.010;
292
293with the same effect.
294
295If the required version is older than Perl 5.10, the ":default" feature
296bundle is automatically loaded instead.
297
298=back
299
300=cut
301
302
# spent 225µs (56+169) within feature::import which was called: # once (56µs+169µs) by File::Glob::BEGIN@7 at line 7 of File/Glob.pm
sub import {
30314µs my $class = shift;
304
30512µs if (!@_) {
306 croak("No features specified");
307 }
308
309129µs1169µs __common(1, @_);
# spent 169µs making 1 call to feature::__common
310}
311
312sub unimport {
313 my $class = shift;
314
315 # A bare C<no feature> should reset to the default bundle
316 if (!@_) {
317 $^H &= ~($hint_uni8bit|$hint_mask);
318 return;
319 }
320
321 __common(0, @_);
322}
323
324
325
# spent 169µs within feature::__common which was called: # once (169µs+0s) by feature::import at line 309
sub __common {
32613µs my $import = shift;
32716µs my $bundle_number = $^H & $hint_mask;
32817µs my $features = $bundle_number != $hint_mask
329 && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
33014µs if ($features) {
331 # Features are enabled implicitly via bundle hints.
332 # Delete any keys that may be left over from last time.
333177µs delete @^H{ values(%feature) };
33414µs $^H |= $hint_mask;
33516µs for (@$features) {
336112µs $^H{$feature{$_}} = 1;
337110µs $^H |= $hint_uni8bit if $_ eq 'unicode_strings';
338 }
339 }
340139µs while (@_) {
34113µs my $name = shift;
34215µs if (substr($name, 0, 1) eq ":") {
343 my $v = substr($name, 1);
344 if (!exists $feature_bundle{$v}) {
345 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
346 if (!exists $feature_bundle{$v}) {
347 unknown_feature_bundle(substr($name, 1));
348 }
349 }
350 unshift @_, @{$feature_bundle{$v}};
351 next;
352 }
35313µs if (!exists $feature{$name}) {
354 unknown_feature($name);
355 }
35615µs if ($import) {
357111µs $^H{$feature{$name}} = 1;
35812µs $^H |= $hint_uni8bit if $name eq 'unicode_strings';
359 } else {
360 delete $^H{$feature{$name}};
361 $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
362 }
363 }
364}
365
366sub unknown_feature {
367 my $feature = shift;
368 croak(sprintf('Feature "%s" is not supported by Perl %vd',
369 $feature, $^V));
370}
371
372sub unknown_feature_bundle {
373 my $feature = shift;
374 croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',
375 $feature, $^V));
376}
377
378sub croak {
379 require Carp;
380 Carp::croak(@_);
381}
382
383159µs1;
384
385# ex: set ro: