This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add < > variants to paired delimiters
[perl5.git] / regen / feature.pl
CommitLineData
69bcf1d3
FC
1#!/usr/bin/perl
2#
3# Regenerate (overwriting only if changed):
4#
5# lib/feature.pm
f2c01b15 6# feature.h
69bcf1d3 7#
3489ea76 8# from information hardcoded into this script and from two #defines
d73d634c 9# in perl.h.
69bcf1d3
FC
10#
11# This script is normally invoked from regen.pl.
12
13BEGIN {
3d7c117d 14 require './regen/regen_lib.pl';
69bcf1d3
FC
15 push @INC, './lib';
16}
69bcf1d3 17
3b8e6999
N
18use strict;
19use warnings;
c452a42f
FC
20
21###########################################################################
22# Hand-editable data
23
c6b36e45 24# (feature name) => (internal name, used in %^H and macro names)
69bcf1d3 25my %feature = (
67bdaa9e
FC
26 say => 'say',
27 state => 'state',
28 switch => 'switch',
cec892e7 29 bitwise => 'bitwise',
67bdaa9e
FC
30 evalbytes => 'evalbytes',
31 current_sub => '__SUB__',
baabe3fb 32 refaliasing => 'refaliasing',
158becca 33 postderef_qq => 'postderef_qq',
67bdaa9e 34 unicode_eval => 'unieval',
82d83da3 35 declared_refs => 'myref',
67bdaa9e 36 unicode_strings => 'unicode',
2a4315f8 37 fc => 'fc',
30d9c59b 38 signatures => 'signatures',
813e85a0 39 isa => 'isa',
0b657b19 40 indirect => 'indirect',
1ad5a39c 41 multidimensional => 'multidimensional',
0f2beabb 42 bareword_filehandles => 'bareword_filehandles',
a1325b90 43 try => 'try',
f79e2ff9 44 defer => 'defer',
9c9853e8 45 extra_paired_delimiters => 'more_delims',
69bcf1d3
FC
46);
47
40e4d872
FC
48# NOTE: If a feature is ever enabled in a non-contiguous range of Perl
49# versions, any code below that uses %BundleRanges will have to
50# be changed to account.
51
52fc5c56 52# 5.odd implies the next 5.even, but an explicit 5.even can override it.
3b8e6999
N
53
54# features bundles
0f2beabb 55use constant V5_9_5 => sort qw{say state switch indirect multidimensional bareword_filehandles};
3b8e6999
N
56use constant V5_11 => sort ( +V5_9_5, qw{unicode_strings} );
57use constant V5_15 => sort ( +V5_11, qw{unicode_eval evalbytes current_sub fc} );
58use constant V5_23 => sort ( +V5_15, qw{postderef_qq} );
59use constant V5_27 => sort ( +V5_23, qw{bitwise} );
cdba169f
RS
60
61use constant V5_35 => sort grep {; $_ ne 'switch'
d5c835da 62 && $_ ne 'bareword_filehandles'
cdba169f 63 && $_ ne 'indirect'
3d1a4f06 64 && $_ ne 'multidimensional' } +V5_27, qw{isa signatures};
3b8e6999 65
69bcf1d3 66my %feature_bundle = (
3b8e6999 67 all => [ sort keys %feature ],
0f2beabb 68 default => [ qw{indirect multidimensional bareword_filehandles} ],
3b8e6999
N
69 # using 5.9.5 features bundle
70 "5.9.5" => [ +V5_9_5 ],
71 "5.10" => [ +V5_9_5 ],
72 # using 5.11 features bundle
73 "5.11" => [ +V5_11 ],
74 "5.13" => [ +V5_11 ],
75 # using 5.15 features bundle
76 "5.15" => [ +V5_15 ],
77 "5.17" => [ +V5_15 ],
78 "5.19" => [ +V5_15 ],
79 "5.21" => [ +V5_15 ],
80 # using 5.23 features bundle
81 "5.23" => [ +V5_23 ],
82 "5.25" => [ +V5_23 ],
83 # using 5.27 features bundle
84 "5.27" => [ +V5_27 ],
85 "5.29" => [ +V5_27 ],
86 "5.31" => [ +V5_27 ],
87 "5.33" => [ +V5_27 ],
915e574d
RS
88 # using 5.35 features bundle
89 "5.35" => [ +V5_35 ],
69bcf1d3
FC
90);
91
db629560 92my @noops = qw( postderef lexical_subs );
c22e17d0 93my @removed = qw( array_base );
db629560 94
c452a42f 95
69bcf1d3 96###########################################################################
c452a42f 97# More data generated from the above
69bcf1d3 98
9f601cf3
TC
99if (keys %feature > 32) {
100 die "cop_features only has room for 32 features";
101}
102
103my %feature_bits;
104my $mask = 1;
105for my $feature (sort keys %feature) {
106 $feature_bits{$feature} = $mask;
107 $mask <<= 1;
108}
109
52fc5c56
FC
110for (keys %feature_bundle) {
111 next unless /^5\.(\d*[13579])\z/;
112 $feature_bundle{"5.".($1+1)} ||= $feature_bundle{$_};
113}
114
f2c01b15
FC
115my %UniqueBundles; # "say state switch" => 5.10
116my %Aliases; # 5.12 => 5.11
117for( sort keys %feature_bundle ) {
118 my $value = join(' ', sort @{$feature_bundle{$_}});
119 if (exists $UniqueBundles{$value}) {
120 $Aliases{$_} = $UniqueBundles{$value};
121 }
122 else {
123 $UniqueBundles{$value} = $_;
124 }
125}
40e4d872
FC
126 # start end
127my %BundleRanges; # say => ['5.10', '5.15'] # unique bundles for values
128for my $bund (
129 sort { $a eq 'default' ? -1 : $b eq 'default' ? 1 : $a cmp $b }
130 values %UniqueBundles
131) {
03222170 132 next if $bund =~ /[^\d.]/ and $bund ne 'default';
40e4d872
FC
133 for (@{$feature_bundle{$bund}}) {
134 if (@{$BundleRanges{$_} ||= []} == 2) {
135 $BundleRanges{$_}[1] = $bund
136 }
137 else {
138 push @{$BundleRanges{$_}}, $bund;
139 }
140 }
141}
69bcf1d3 142
47222a2d 143my $HintShift;
ada44f8c 144my $HintMask;
3489ea76 145my $Uni8Bit;
47222a2d 146
1ae6ead9 147open "perl.h", "<", "perl.h" or die "$0 cannot open perl.h: $!";
3489ea76
FC
148while (readline "perl.h") {
149 next unless /#\s*define\s+(HINT_FEATURE_MASK|HINT_UNI_8_BIT)/;
150 my $is_u8b = $1 =~ 8;
151 /(0x[A-Fa-f0-9]+)/ or die "No hex number in:\n\n$_\n ";
152 if ($is_u8b) {
153 $Uni8Bit = $1;
154 }
155 else {
ada44f8c 156 my $hex = $HintMask = $1;
47222a2d
FC
157 my $bits = sprintf "%b", oct $1;
158 $bits =~ /^0*1+(0*)\z/
159 or die "Non-contiguous bits in $bits (binary for $hex):\n\n$_\n ";
160 $HintShift = length $1;
161 my $bits_needed =
162 length sprintf "%b", scalar keys %UniqueBundles;
163 $bits =~ /1{$bits_needed}/
164 or die "Not enough bits (need $bits_needed)"
5d826eae 165 . " in $bits (binary for $hex):\n\n$_\n ";
47222a2d 166 }
3489ea76 167 if ($Uni8Bit && $HintMask) { last }
47222a2d 168}
3489ea76
FC
169die "No HINT_FEATURE_MASK defined in perl.h" unless $HintMask;
170die "No HINT_UNI_8_BIT defined in perl.h" unless $Uni8Bit;
171
47222a2d
FC
172close "perl.h";
173
ada44f8c
FC
174my @HintedBundles =
175 ('default', grep !/[^\d.]/, sort values %UniqueBundles);
176
47222a2d 177
f2c01b15 178###########################################################################
c452a42f 179# Open files to be generated
f2c01b15
FC
180
181my ($pm, $h) = map {
69bcf1d3 182 open_new($_, '>', { by => 'regen/feature.pl' });
f2c01b15 183} 'lib/feature.pm', 'feature.h';
69bcf1d3
FC
184
185
c452a42f
FC
186###########################################################################
187# Generate lib/feature.pm
188
69bcf1d3
FC
189while (<DATA>) {
190 last if /^FEATURES$/ ;
191 print $pm $_ ;
192}
193
194sub longest {
195 my $long;
196 for(@_) {
197 if (!defined $long or length $long < length) {
198 $long = $_;
199 }
200 }
201 $long;
202}
203
0bb01b05 204print $pm "our %feature = (\n";
69bcf1d3 205my $width = length longest keys %feature;
ebd25686 206for(sort { length $a <=> length $b || $a cmp $b } keys %feature) {
67bdaa9e
FC
207 print $pm " $_" . " "x($width-length)
208 . " => 'feature_$feature{$_}',\n";
69bcf1d3
FC
209}
210print $pm ");\n\n";
211
69bcf1d3 212print $pm "our %feature_bundle = (\n";
9f601cf3 213my $bund_width = length longest values %UniqueBundles;
88da30d7
FC
214for( sort { $UniqueBundles{$a} cmp $UniqueBundles{$b} }
215 keys %UniqueBundles ) {
216 my $bund = $UniqueBundles{$_};
9f601cf3 217 print $pm qq' "$bund"' . " "x($bund_width-length $bund)
88da30d7 218 . qq' => [qw($_)],\n';
69bcf1d3
FC
219}
220print $pm ");\n\n";
221
88da30d7
FC
222for (sort keys %Aliases) {
223 print $pm
224 qq'\$feature_bundle{"$_"} = \$feature_bundle{"$Aliases{$_}"};\n';
225};
69bcf1d3 226
db629560
FC
227print $pm "my \%noops = (\n";
228print $pm " $_ => 1,\n", for @noops;
229print $pm ");\n";
230
c22e17d0
DIM
231print $pm "my \%removed = (\n";
232print $pm " $_ => 1,\n", for @removed;
233print $pm ");\n";
234
ada44f8c
FC
235print $pm <<EOPM;
236
0bb01b05
FC
237our \$hint_shift = $HintShift;
238our \$hint_mask = $HintMask;
239our \@hint_bundles = qw( @HintedBundles );
3489ea76
FC
240
241# This gets set (for now) in \$^H as well as in %^H,
242# for runtime speed of the uc/lc/ucfirst/lcfirst functions.
243# See HINT_UNI_8_BIT in perl.h.
244our \$hint_uni8bit = $Uni8Bit;
ada44f8c
FC
245EOPM
246
69bcf1d3
FC
247
248while (<DATA>) {
2b3fe414
FC
249 last if /^PODTURES$/ ;
250 print $pm $_ ;
251}
252
253select +(select($pm), $~ = 'PODTURES')[0];
254format PODTURES =
255 ^<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
256$::bundle, $::feature
257.
258
259for ('default', sort grep /\.\d[02468]/, keys %feature_bundle) {
260 $::bundle = ":$_";
261 $::feature = join ' ', @{$feature_bundle{$_}};
262 write $pm;
263 print $pm "\n";
264}
265
266while (<DATA>) {
69bcf1d3
FC
267 print $pm $_ ;
268}
269
270read_only_bottom_close_and_rename($pm);
271
c452a42f
FC
272
273###########################################################################
274# Generate feature.h
275
f2c01b15
FC
276print $h <<EOH;
277
3dd7db29
JK
278#ifndef PERL_FEATURE_H_
279#define PERL_FEATURE_H_
280
f2c01b15
FC
281#if defined(PERL_CORE) || defined (PERL_EXT)
282
283#define HINT_FEATURE_SHIFT $HintShift
284
f2c01b15
FC
285EOH
286
9f601cf3
TC
287for (sort keys %feature_bits) {
288 printf $h "#define FEATURE_%s_BIT%*s %#06x\n", uc($feature{$_}),
289 $width-length($feature{$_}), "", $feature_bits{$_};
290}
291print $h "\n";
292
f2c01b15 293my $count;
016d11cb
FC
294for (@HintedBundles) {
295 (my $key = uc) =~ y/.//d;
296 print $h "#define FEATURE_BUNDLE_$key ", $count++, "\n";
f2c01b15
FC
297}
298
7d058bc9 299print $h <<'EOH';
2b9e0ab7 300#define FEATURE_BUNDLE_CUSTOM (HINT_FEATURE_MASK >> HINT_FEATURE_SHIFT)
f2c01b15 301
7d058bc9 302#define CURRENT_HINTS \
d1fd0100 303 (PL_curcop == &PL_compiling ? PL_hints : PL_curcop->cop_hints)
035b6821
FC
304#define CURRENT_FEATURE_BUNDLE \
305 ((CURRENT_HINTS & HINT_FEATURE_MASK) >> HINT_FEATURE_SHIFT)
d1fd0100 306
9f601cf3
TC
307#define FEATURE_IS_ENABLED_MASK(mask) \
308 ((CURRENT_HINTS & HINT_LOCALIZE_HH) \
309 ? (PL_curcop->cop_features & (mask)) : FALSE)
310
7d058bc9 311/* The longest string we pass in. */
03222170
FC
312EOH
313
1b6e8741
FC
314my $longest_internal_feature_name = longest values %feature;
315print $h <<EOL;
316#define MAX_FEATURE_LEN (sizeof("$longest_internal_feature_name")-1)
317
318EOL
319
03222170 320for (
ebd25686 321 sort { length $a <=> length $b || $a cmp $b } keys %feature
03222170
FC
322) {
323 my($first,$last) =
324 map { (my $__ = uc) =~ y/.//d; $__ } @{$BundleRanges{$_}};
3fff3427 325 my $name = $feature{$_};
03222170 326 my $NAME = uc $name;
f298f061 327 if ($last && $first eq 'DEFAULT') { # '>= DEFAULT' warns
beda0318 328 print $h <<EOI;
23fa16fc 329#define FEATURE_${NAME}_IS_ENABLED \\
beda0318
FC
330 ( \\
331 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last \\
332 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
23fa16fc 333 FEATURE_IS_ENABLED_MASK(FEATURE_${NAME}_BIT)) \\
beda0318
FC
334 )
335
336EOI
337 }
338 elsif ($last) {
03222170 339 print $h <<EOH3;
23fa16fc 340#define FEATURE_${NAME}_IS_ENABLED \\
03222170
FC
341 ( \\
342 (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_$first && \\
343 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last) \\
344 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
23fa16fc 345 FEATURE_IS_ENABLED_MASK(FEATURE_${NAME}_BIT)) \\
03222170
FC
346 )
347
348EOH3
349 }
ebd25686 350 elsif ($first) {
03222170 351 print $h <<EOH4;
23fa16fc 352#define FEATURE_${NAME}_IS_ENABLED \\
03222170
FC
353 ( \\
354 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_$first \\
355 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
23fa16fc 356 FEATURE_IS_ENABLED_MASK(FEATURE_${NAME}_BIT)) \\
03222170
FC
357 )
358
359EOH4
360 }
ebd25686
FC
361 else {
362 print $h <<EOH5;
23fa16fc 363#define FEATURE_${NAME}_IS_ENABLED \\
ebd25686
FC
364 ( \\
365 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
23fa16fc 366 FEATURE_IS_ENABLED_MASK(FEATURE_${NAME}_BIT) \\
ebd25686
FC
367 )
368
369EOH5
370 }
03222170
FC
371}
372
373print $h <<EOH;
374
9f601cf3
TC
375#define SAVEFEATUREBITS() SAVEI32(PL_compiling.cop_features)
376
377#define CLEARFEATUREBITS() (PL_compiling.cop_features = 0)
378
379#define STOREFEATUREBITSHH(hh) \\
380 (hv_stores((hh), "feature/bits", newSVuv(PL_compiling.cop_features)))
381
382#define FETCHFEATUREBITSHH(hh) \\
383 STMT_START { \\
384 SV **fbsv = hv_fetchs((hh), "feature/bits", FALSE); \\
385 PL_compiling.cop_features = fbsv ? SvUV(*fbsv) : 0; \\
386 } STMT_END
387
f2c01b15 388#endif /* PERL_CORE or PERL_EXT */
4160ddbd
FC
389
390#ifdef PERL_IN_OP_C
391PERL_STATIC_INLINE void
392S_enable_feature_bundle(pTHX_ SV *ver)
393{
394 SV *comp_ver = sv_newmortal();
395 PL_hints = (PL_hints &~ HINT_FEATURE_MASK)
396 | (
f2c01b15
FC
397EOH
398
4160ddbd
FC
399for (reverse @HintedBundles[1..$#HintedBundles]) { # skip default
400 my $numver = $_;
401 if ($numver eq '5.10') { $numver = '5.009005' } # special case
402 else { $numver =~ s/\./.0/ } # 5.11 => 5.011
403 (my $macrover = $_) =~ y/.//d;
404 print $h <<" EOK";
405 (sv_setnv(comp_ver, $numver),
406 vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
407 ? FEATURE_BUNDLE_$macrover :
408 EOK
409}
410
411print $h <<EOJ;
412 FEATURE_BUNDLE_DEFAULT
413 ) << HINT_FEATURE_SHIFT;
6389c777
FC
414 /* special case */
415 assert(PL_curcop == &PL_compiling);
416 if (FEATURE_UNICODE_IS_ENABLED) PL_hints |= HINT_UNI_8_BIT;
417 else PL_hints &= ~HINT_UNI_8_BIT;
4160ddbd
FC
418}
419#endif /* PERL_IN_OP_C */
3dd7db29 420
b34c1a7e
TC
421#ifdef PERL_IN_MG_C
422
423#define magic_sethint_feature(keysv, keypv, keylen, valsv, valbool) \\
424 S_magic_sethint_feature(aTHX_ (keysv), (keypv), (keylen), (valsv), (valbool))
425PERL_STATIC_INLINE void
426S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen,
427 SV *valsv, bool valbool) {
428 if (keysv)
429 keypv = SvPV_const(keysv, keylen);
430
431 if (memBEGINs(keypv, keylen, "feature_")) {
432 const char *subf = keypv + (sizeof("feature_")-1);
433 U32 mask = 0;
434 switch (*subf) {
435EOJ
436
437my %pref;
438for my $key (sort values %feature) {
439 push @{$pref{substr($key, 0, 1)}}, $key;
440}
441
442for my $pref (sort keys %pref) {
443 print $h <<EOS;
444 case '$pref':
445EOS
446 my $first = 1;
447 for my $subkey (@{$pref{$pref}}) {
448 my $rest = substr($subkey, 1);
449 my $if = $first ? "if" : "else if";
450 print $h <<EOJ;
451 $if (keylen == sizeof("feature_$subkey")-1
452 && memcmp(subf+1, "$rest", keylen - sizeof("feature_")) == 0) {
453 mask = FEATURE_\U${subkey}\E_BIT;
454 break;
455 }
456EOJ
457
458 $first = 0;
459 }
460 print $h <<EOS;
461 return;
462
463EOS
464}
465
466print $h <<EOJ;
467 default:
468 return;
469 }
470 if (valsv ? SvTRUE(valsv) : valbool)
471 PL_compiling.cop_features |= mask;
472 else
473 PL_compiling.cop_features &= ~mask;
474 }
475}
476#endif /* PERL_IN_MG_C */
477
3dd7db29 478#endif /* PERL_FEATURE_H_ */
4160ddbd
FC
479EOJ
480
f2c01b15
FC
481read_only_bottom_close_and_rename($h);
482
c452a42f
FC
483
484###########################################################################
485# Template for feature.pm
486
69bcf1d3
FC
487__END__
488package feature;
489
765cd546 490our $VERSION = '1.71';
69bcf1d3
FC
491
492FEATURES
493
69bcf1d3
FC
494# TODO:
495# - think about versioned features (use feature switch => 2)
496
9c9853e8
KW
497=encoding utf8
498
69bcf1d3
FC
499=head1 NAME
500
501feature - Perl pragma to enable new features
502
503=head1 SYNOPSIS
504
d15aa6ae
RS
505 use feature qw(fc say);
506
507 # Without the "use feature" above, this code would not be able to find
508 # the built-ins "say" or "fc":
509 say "The case-folded version of $x is: " . fc $x;
510
511
512 # set features to match the :5.10 bundle, which may turn off or on
513 # multiple features (see below)
514 use feature ':5.10';
69bcf1d3 515
69bcf1d3 516
d15aa6ae
RS
517 # implicitly loads :5.10 feature bundle
518 use v5.10;
69bcf1d3
FC
519
520=head1 DESCRIPTION
521
522It is usually impossible to add new syntax to Perl without breaking
523some existing programs. This pragma provides a way to minimize that
524risk. New syntactic constructs, or new semantic meanings to older
525constructs, can be enabled by C<use feature 'foo'>, and will be parsed
526only when the appropriate feature pragma is in scope. (Nevertheless, the
527C<CORE::> prefix provides access to all Perl keywords, regardless of this
528pragma.)
529
530=head2 Lexical effect
531
532Like other pragmas (C<use strict>, for example), features have a lexical
301381dc 533effect. C<use feature qw(foo)> will only make the feature "foo" available
69bcf1d3
FC
534from that point to the end of the enclosing block.
535
536 {
537 use feature 'say';
538 say "say is available here";
539 }
540 print "But not here.\n";
541
542=head2 C<no feature>
543
544Features can also be turned off by using C<no feature "foo">. This too
545has lexical effect.
546
547 use feature 'say';
548 say "say is available here";
549 {
550 no feature 'say';
551 print "But not here.\n";
552 }
553 say "Yet it is here.";
554
39ec54a5
RS
555C<no feature> with no features specified will reset to the default group. To
556disable I<all> features (an unusual request!) use C<no feature ':all'>.
69bcf1d3
FC
557
558=head1 AVAILABLE FEATURES
559
560=head2 The 'say' feature
561
5d6cc146 562C<use feature 'say'> tells the compiler to enable the Raku-inspired
69bcf1d3
FC
563C<say> function.
564
565See L<perlfunc/say> for details.
566
567This feature is available starting with Perl 5.10.
568
569=head2 The 'state' feature
570
571C<use feature 'state'> tells the compiler to enable C<state>
572variables.
573
574See L<perlsub/"Persistent Private Variables"> for details.
575
576This feature is available starting with Perl 5.10.
577
578=head2 The 'switch' feature
579
d23c9e49
RS
580B<WARNING>: This feature is still experimental and the implementation may
581change or be removed in future versions of Perl. For this reason, Perl will
582warn when you use the feature, unless you have explicitly disabled the warning:
7caca87c
DB
583
584 no warnings "experimental::smartmatch";
585
5d6cc146 586C<use feature 'switch'> tells the compiler to enable the Raku
69bcf1d3
FC
587given/when construct.
588
48238296 589See L<perlsyn/"Switch Statements"> for details.
69bcf1d3
FC
590
591This feature is available starting with Perl 5.10.
592
593=head2 The 'unicode_strings' feature
594
850b7ec9 595C<use feature 'unicode_strings'> tells the compiler to use Unicode rules
69bcf1d3
FC
596in all string operations executed within its scope (unless they are also
597within the scope of either C<use locale> or C<use bytes>). The same applies
598to all regular expressions compiled within the scope, even if executed outside
2269d15c
KW
599it. It does not change the internal representation of strings, but only how
600they are interpreted.
69bcf1d3
FC
601
602C<no feature 'unicode_strings'> tells the compiler to use the traditional
850b7ec9 603Perl rules wherein the native character set rules is used unless it is
69bcf1d3
FC
604clear to Perl that Unicode is desired. This can lead to some surprises
605when the behavior suddenly changes. (See
606L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are
607potentially using Unicode in your program, the
608C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
609
2e2b2571 610This feature is available starting with Perl 5.12; was almost fully
d6c970c7 611implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>;
20ae58f7
AC
612was extended further in Perl 5.26 to cover L<the range
613operator|perlop/Range Operators>; and was extended again in Perl 5.28 to
614cover L<special-cased whitespace splitting|perlfunc/split>.
69bcf1d3
FC
615
616=head2 The 'unicode_eval' and 'evalbytes' features
617
9891e9b7
KW
618Together, these two features are intended to replace the legacy string
619C<eval> function, which behaves problematically in some instances. They are
620available starting with Perl 5.16, and are enabled by default by a
621S<C<use 5.16>> or higher declaration.
622
623C<unicode_eval> changes the behavior of plain string C<eval> to work more
624consistently, especially in the Unicode world. Certain (mis)behaviors
625couldn't be changed without breaking some things that had come to rely on
626them, so the feature can be enabled and disabled. Details are at
627L<perlfunc/Under the "unicode_eval" feature>.
628
e6f2f64a
FG
629C<evalbytes> is like string C<eval>, but it treats its argument as a byte
630string. Details are at L<perlfunc/evalbytes EXPR>. Without a
9891e9b7
KW
631S<C<use feature 'evalbytes'>> nor a S<C<use v5.16>> (or higher) declaration in
632the current scope, you can still access it by instead writing
633C<CORE::evalbytes>.
69bcf1d3
FC
634
635=head2 The 'current_sub' feature
636
637This provides the C<__SUB__> token that returns a reference to the current
638subroutine or C<undef> outside of a subroutine.
639
640This feature is available starting with Perl 5.16.
641
642=head2 The 'array_base' feature
643
c22e17d0
DIM
644This feature supported the legacy C<$[> variable. See L<perlvar/$[>.
645It was on by default but disabled under C<use v5.16> (see
646L</IMPLICIT LOADING>, below) and unavailable since perl 5.30.
69bcf1d3
FC
647
648This feature is available under this name starting with Perl 5.16. In
649previous versions, it was simply on all the time, and this pragma knew
650nothing about it.
651
2a4315f8
BF
652=head2 The 'fc' feature
653
654C<use feature 'fc'> tells the compiler to enable the C<fc> function,
655which implements Unicode casefolding.
656
657See L<perlfunc/fc> for details.
658
659This feature is available from Perl 5.16 onwards.
660
ca40957e
FC
661=head2 The 'lexical_subs' feature
662
8f7d85af
FC
663In Perl versions prior to 5.26, this feature enabled
664declaration of subroutines via C<my sub foo>, C<state sub foo>
665and C<our sub foo> syntax. See L<perlsub/Lexical Subroutines> for details.
ca40957e 666
8f7d85af
FC
667This feature is available from Perl 5.18 onwards. From Perl 5.18 to 5.24,
668it was classed as experimental, and Perl emitted a warning for its
669usage, except when explicitly disabled:
ca40957e 670
8f7d85af 671 no warnings "experimental::lexical_subs";
ca40957e 672
8f7d85af
FC
673As of Perl 5.26, use of this feature no longer triggers a warning, though
674the C<experimental::lexical_subs> warning category still exists (for
675compatibility with code that disables it). In addition, this syntax is
676not only no longer experimental, but it is enabled for all Perl code,
677regardless of what feature declarations are in scope.
ca40957e 678
f86d720e
RS
679=head2 The 'postderef' and 'postderef_qq' features
680
1c2511e0
AC
681The 'postderef_qq' feature extends the applicability of L<postfix
682dereference syntax|perlref/Postfix Dereference Syntax> so that postfix array
683and scalar dereference are available in double-quotish interpolations. For
684example, it makes the following two statements equivalent:
f86d720e 685
1c2511e0
AC
686 my $s = "[@{ $h->{a} }]";
687 my $s = "[$h->{a}->@*]";
f86d720e 688
1c2511e0
AC
689This feature is available from Perl 5.20 onwards. In Perl 5.20 and 5.22, it
690was classed as experimental, and Perl emitted a warning for its
2ad792cd
AC
691usage, except when explicitly disabled:
692
693 no warnings "experimental::postderef";
694
1c2511e0 695As of Perl 5.24, use of this feature no longer triggers a warning, though
2ad792cd
AC
696the C<experimental::postderef> warning category still exists (for
697compatibility with code that disables it).
f86d720e 698
1c2511e0
AC
699The 'postderef' feature was used in Perl 5.20 and Perl 5.22 to enable
700postfix dereference syntax outside double-quotish interpolations. In those
701versions, using it triggered the C<experimental::postderef> warning in the
702same way as the 'postderef_qq' feature did. As of Perl 5.24, this syntax is
703not only no longer experimental, but it is enabled for all Perl code,
704regardless of what feature declarations are in scope.
705
30d9c59b
Z
706=head2 The 'signatures' feature
707
3d1a4f06 708This enables syntax for declaring subroutine arguments as lexical variables.
765cd546 709For example, for this subroutine:
30d9c59b
Z
710
711 sub foo ($left, $right) {
3d1a4f06 712 return $left + $right;
30d9c59b
Z
713 }
714
3d1a4f06
PE
715Calling C<foo(3, 7)> will assign C<3> into C<$left> and C<7> into C<$right>.
716
30d9c59b
Z
717See L<perlsub/Signatures> for details.
718
088588be
PE
719This feature is available from Perl 5.20 onwards. From Perl 5.20 to 5.34,
720it was classed as experimental, and Perl emitted a warning for its usage,
721except when explicitly disabled:
722
723 no warnings "experimental::signatures";
724
725As of Perl 5.36, use of this feature no longer triggers a warning, though the
726C<experimental::signatures> warning category still exists (for compatibility
3d1a4f06
PE
727with code that disables it). This feature is now considered stable, and is
728enabled automatically by C<use v5.36> (or higher).
30d9c59b 729
baabe3fb 730=head2 The 'refaliasing' feature
82848c10
FC
731
732B<WARNING>: This feature is still experimental and the implementation may
d23c9e49
RS
733change or be removed in future versions of Perl. For this reason, Perl will
734warn when you use the feature, unless you have explicitly disabled the warning:
82848c10 735
baabe3fb 736 no warnings "experimental::refaliasing";
82848c10
FC
737
738This enables aliasing via assignment to references:
739
740 \$a = \$b; # $a and $b now point to the same scalar
741 \@a = \@b; # to the same array
742 \%a = \%b;
743 \&a = \&b;
744 foreach \%hash (@array_of_hash_refs) {
745 ...
746 }
747
748See L<perlref/Assigning to References> for details.
749
750This feature is available from Perl 5.22 onwards.
751
70ea8edf
FC
752=head2 The 'bitwise' feature
753
70ea8edf
FC
754This makes the four standard bitwise operators (C<& | ^ ~>) treat their
755operands consistently as numbers, and introduces four new dotted operators
756(C<&. |. ^. ~.>) that treat their operands consistently as strings. The
757same applies to the assignment variants (C<&= |= ^= &.= |.= ^.=>).
758
759See L<perlop/Bitwise String Operators> for details.
760
193789ac
FC
761This feature is available from Perl 5.22 onwards. Starting in Perl 5.28,
762C<use v5.28> will enable the feature. Before 5.28, it was still
763experimental and would emit a warning in the "experimental::bitwise"
764category.
70ea8edf 765
5c703779
FC
766=head2 The 'declared_refs' feature
767
768B<WARNING>: This feature is still experimental and the implementation may
d23c9e49
RS
769change or be removed in future versions of Perl. For this reason, Perl will
770warn when you use the feature, unless you have explicitly disabled the warning:
5c703779
FC
771
772 no warnings "experimental::declared_refs";
773
774This allows a reference to a variable to be declared with C<my>, C<state>,
775our C<our>, or localized with C<local>. It is intended mainly for use in
776conjunction with the "refaliasing" feature. See L<perlref/Declaring a
777Reference to a Variable> for examples.
778
779This feature is available from Perl 5.26 onwards.
780
813e85a0
PE
781=head2 The 'isa' feature
782
783This allows the use of the C<isa> infix operator, which tests whether the
784scalar given by the left operand is an object of the class given by the
785right operand. See L<perlop/Class Instance Operator> for more details.
786
157bd0a3
PE
787This feature is available from Perl 5.32 onwards. From Perl 5.32 to 5.34,
788it was classed as experimental, and Perl emitted a warning for its usage,
789except when explicitly disabled:
790
791 no warnings "experimental::isa";
792
793As of Perl 5.36, use of this feature no longer triggers a warning (though the
794C<experimental::isa> warning category stilll exists for compatibility with
02547a38
PE
795code that disables it). This feature is now considered stable, and is enabled
796automatically by C<use v5.36> (or higher).
813e85a0 797
0b657b19
DIM
798=head2 The 'indirect' feature
799
800This feature allows the use of L<indirect object
801syntax|perlobj/Indirect Object Syntax> for method calls, e.g. C<new
802Foo 1, 2;>. It is enabled by default, but can be turned off to
803disallow indirect object syntax.
804
805This feature is available under this name from Perl 5.32 onwards. In
806previous versions, it was simply on all the time. To disallow (or
807warn on) indirect object syntax on older Perls, see the L<indirect>
808CPAN module.
809
1ad5a39c
TC
810=head2 The 'multidimensional' feature
811
812This feature enables multidimensional array emulation, a perl 4 (or
813earlier) feature that was used to emulate multidimensional arrays with
c7888de9
EAV
814hashes. This works by converting code like C<< $foo{$x, $y} >> into
815C<< $foo{join($;, $x, $y)} >>. It is enabled by default, but can be
1ad5a39c
TC
816turned off to disable multidimensional array emulation.
817
818When this feature is disabled the syntax that is normally replaced
819will report a compilation error.
820
821This feature is available under this name from Perl 5.34 onwards. In
822previous versions, it was simply on all the time.
823
824You can use the L<multidimensional> module on CPAN to disable
825multidimensional array emulation for older versions of Perl.
826
0f2beabb
TC
827=head2 The 'bareword_filehandles' feature.
828
829This feature enables bareword filehandles for builtin functions
830operations, a generally discouraged practice. It is enabled by
831default, but can be turned off to disable bareword filehandles, except
832for the exceptions listed below.
833
834The perl built-in filehandles C<STDIN>, C<STDOUT>, C<STDERR>, C<DATA>,
835C<ARGV>, C<ARGVOUT> and the special C<_> are always enabled.
836
d5c835da
RS
837This behavior was always present in versions before Perl 5.34. In Perl 5.34,
838it was made controllable with the C<feature> pragma, but was on by default.
839It is not present in the C<:5.36> feature bundle, so C<use v5.36> disables
840this feature.
0f2beabb
TC
841
842You can use the L<bareword::filehandles> module on CPAN to disable
843bareword filehandles for older versions of perl.
844
a1325b90
PE
845=head2 The 'try' feature.
846
35b06c4c
RS
847B<WARNING>: This feature is still experimental and the implementation may
848change or be removed in future versions of Perl. For this reason, Perl will
849warn when you use the feature, unless you have explicitly disabled the warning:
850
851 no warnings "experimental::try";
852
a1325b90 853This feature enables the C<try> and C<catch> syntax, which allows exception
4a485c3e 854handling, where exceptions thrown from the body of the block introduced with
a1325b90
PE
855C<try> are caught by executing the body of the C<catch> block.
856
857For more information, see L<perlsyn/"Try Catch Exception Handling">.
858
f79e2ff9
PE
859=head2 The 'defer' feature
860
861This feature enables the C<defer> block syntax, which allows a block of code
862to be deferred until when the flow of control leaves the block which contained
863it. For more details, see L<perlsyn/defer>.
864
9c9853e8
KW
865=head2 The 'extra_paired_delimiters' feature
866
867B<WARNING>: This feature is still experimental and the implementation may
868change or be removed in future versions of Perl. For this reason, Perl will
869warn when you use the feature, unless you have explicitly disabled the warning:
870
871 no warnings "experimental::extra_paired_delimiters";
872
873This feature enables the use of more paired string delimiters than the
874traditional four, S<C<< < > >>>, S<C<( )>>, S<C<{ }>>, and S<C<[ ]>>. When
875this feature is on, for example, you can say S<C<qrE<171>patE<187>>>.
876
877This feature is available starting in Perl 5.36.
878
879The complete list of accepted paired delimiters as of Unicode 14.0 is:
880
881 ( ) U+0028, U+0029 LEFT/RIGHT PARENTHESIS
7e4a71c6 882 < > U+003C, U+003E LESS-THAN/GREATER-THAN SIGN
9c9853e8
KW
883 [ ] U+005B, U+005D LEFT/RIGHT SQUARE BRACKET
884 { } U+007B, U+007D LEFT/RIGHT CURLY BRACKET
885 « » U+00AB, U+00BB LEFT/RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
835f2666 886 » « U+00BB, U+00AB RIGHT/LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
9c9853e8
KW
887 ༺ ༻ U+0F3A, U+0F3B TIBETAN MARK GUG RTAGS GYON, TIBETAN MARK GUG
888 RTAGS GYAS
889 ༼ ༽ U+0F3C, U+0F3D TIBETAN MARK ANG KHANG GYON, TIBETAN MARK ANG
890 KHANG GYAS
891 ᚛ ᚜ U+169B, U+169C OGHAM FEATHER MARK, OGHAM REVERSED FEATHER MARK
1df06fae
KW
892 ‘ ’ U+2018, U+2019 LEFT/RIGHT SINGLE QUOTATION MARK
893 ’ ‘ U+2019, U+2018 RIGHT/LEFT SINGLE QUOTATION MARK
894 “ ” U+201C, U+201D LEFT/RIGHT DOUBLE QUOTATION MARK
895 ” “ U+201D, U+201C RIGHT/LEFT DOUBLE QUOTATION MARK
9c9853e8 896 ‹ › U+2039, U+203A SINGLE LEFT/RIGHT-POINTING ANGLE QUOTATION MARK
835f2666 897 › ‹ U+203A, U+2039 SINGLE RIGHT/LEFT-POINTING ANGLE QUOTATION MARK
9c9853e8
KW
898 ⁅ ⁆ U+2045, U+2046 LEFT/RIGHT SQUARE BRACKET WITH QUILL
899 ⁽ ⁾ U+207D, U+207E SUPERSCRIPT LEFT/RIGHT PARENTHESIS
900 ₍ ₎ U+208D, U+208E SUBSCRIPT LEFT/RIGHT PARENTHESIS
7e4a71c6
KW
901 ≤ ≥ U+2264, U+2265 LESS-THAN/GREATER-THAN OR EQUAL TO
902 ≦ ≧ U+2266, U+2267 LESS-THAN/GREATER-THAN OVER EQUAL TO
903 ≨ ≩ U+2268, U+2269 LESS-THAN/GREATER-THAN BUT NOT EQUAL TO
904 ≪ ≫ U+226A, U+226B MUCH LESS-THAN/GREATER-THAN
905 ≮ ≯ U+226E, U+226F NOT LESS-THAN/GREATER-THAN
906 ≰ ≱ U+2270, U+2271 NEITHER LESS-THAN/GREATER-THAN NOR EQUAL TO
907 ≲ ≳ U+2272, U+2273 LESS-THAN/GREATER-THAN OR EQUIVALENT TO
908 ≴ ≵ U+2274, U+2275 NEITHER LESS-THAN/GREATER-THAN NOR EQUIVALENT TO
909 ⋖ ⋗ U+22D6, U+22D7 LESS-THAN/GREATER-THAN WITH DOT
910 ⋘ ⋙ U+22D8, U+22D9 VERY MUCH LESS-THAN/GREATER-THAN
911 ⋜ ⋝ U+22DC, U+22DD EQUAL TO OR LESS-THAN/GREATER-THAN
912 ⋦ ⋧ U+22E6, U+22E7 LESS-THAN/GREATER-THAN BUT NOT EQUIVALENT TO
9c9853e8
KW
913 ⌈ ⌉ U+2308, U+2309 LEFT/RIGHT CEILING
914 ⌊ ⌋ U+230A, U+230B LEFT/RIGHT FLOOR
915 〈 〉 U+2329, U+232A LEFT/RIGHT-POINTING ANGLE BRACKET
916 ❨ ❩ U+2768, U+2769 MEDIUM LEFT/RIGHT PARENTHESIS ORNAMENT
917 ❪ ❫ U+276A, U+276B MEDIUM FLATTENED LEFT/RIGHT PARENTHESIS ORNAMENT
918 ❬ ❭ U+276C, U+276D MEDIUM LEFT/RIGHT-POINTING ANGLE BRACKET
919 ORNAMENT
920 ❮ ❯ U+276E, U+276F HEAVY LEFT/RIGHT-POINTING ANGLE QUOTATION MARK
921 ORNAMENT
922 ❰ ❱ U+2770, U+2771 HEAVY LEFT/RIGHT-POINTING ANGLE BRACKET ORNAMENT
923 ❲ ❳ U+2772, U+2773 LIGHT LEFT/RIGHT TORTOISE SHELL BRACKET ORNAMENT
924 ❴ ❵ U+2774, U+2775 MEDIUM LEFT/RIGHT CURLY BRACKET ORNAMENT
925 ⟅ ⟆ U+27C5, U+27C6 LEFT/RIGHT S-SHAPED BAG DELIMITER
926 ⟦ ⟧ U+27E6, U+27E7 MATHEMATICAL LEFT/RIGHT WHITE SQUARE BRACKET
927 ⟨ ⟩ U+27E8, U+27E9 MATHEMATICAL LEFT/RIGHT ANGLE BRACKET
928 ⟪ ⟫ U+27EA, U+27EB MATHEMATICAL LEFT/RIGHT DOUBLE ANGLE BRACKET
929 ⟬ ⟭ U+27EC, U+27ED MATHEMATICAL LEFT/RIGHT WHITE TORTOISE SHELL
930 BRACKET
931 ⟮ ⟯ U+27EE, U+27EF MATHEMATICAL LEFT/RIGHT FLATTENED PARENTHESIS
932 ⦃ ⦄ U+2983, U+2984 LEFT/RIGHT WHITE CURLY BRACKET
933 ⦅ ⦆ U+2985, U+2986 LEFT/RIGHT WHITE PARENTHESIS
934 ⦇ ⦈ U+2987, U+2988 Z NOTATION LEFT/RIGHT IMAGE BRACKET
935 ⦉ ⦊ U+2989, U+298A Z NOTATION LEFT/RIGHT BINDING BRACKET
936 ⦋ ⦌ U+298B, U+298C LEFT/RIGHT SQUARE BRACKET WITH UNDERBAR
937 ⦍ ⦐ U+298D, U+2990 LEFT/RIGHT SQUARE BRACKET WITH TICK IN TOP
938 CORNER
939 ⦏ ⦎ U+298F, U+298E LEFT/RIGHT SQUARE BRACKET WITH TICK IN BOTTOM
940 CORNER
941 ⦑ ⦒ U+2991, U+2992 LEFT/RIGHT ANGLE BRACKET WITH DOT
7e4a71c6
KW
942 ⦓ ⦔ U+2993, U+2994 LEFT/RIGHT ARC LESS-THAN/GREATER-THAN BRACKET
943 ⦕ ⦖ U+2995, U+2996 DOUBLE LEFT/RIGHT ARC GREATER-THAN/LESS-THAN
944 BRACKET
9c9853e8 945 ⦗ ⦘ U+2997, U+2998 LEFT/RIGHT BLACK TORTOISE SHELL BRACKET
7e4a71c6 946 ⧀ ⧁ U+29C0, U+29C1 CIRCLED LESS-THAN/GREATER-THAN
9c9853e8
KW
947 ⧘ ⧙ U+29D8, U+29D9 LEFT/RIGHT WIGGLY FENCE
948 ⧚ ⧛ U+29DA, U+29DB LEFT/RIGHT DOUBLE WIGGLY FENCE
949 ⧼ ⧽ U+29FC, U+29FD LEFT/RIGHT-POINTING CURVED ANGLE BRACKET
7e4a71c6
KW
950 ⩹ ⩺ U+2A79, U+2A7A LESS-THAN/GREATER-THAN WITH CIRCLE INSIDE
951 ⩻ ⩼ U+2A7B, U+2A7C LESS-THAN/GREATER-THAN WITH QUESTION MARK ABOVE
952 ⩽ ⩾ U+2A7D, U+2A7E LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO
953 ⩿ ⪀ U+2A7F, U+2A80 LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH
954 DOT INSIDE
955 ⪁ ⪂ U+2A81, U+2A82 LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH
956 DOT ABOVE
957 ⪃ ⪄ U+2A83, U+2A84 LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH
958 DOT ABOVE RIGHT/LEFT
959 ⪅ ⪆ U+2A85, U+2A86 LESS-THAN/GREATER-THAN OR APPROXIMATE
960 ⪇ ⪈ U+2A87, U+2A88 LESS-THAN/GREATER-THAN AND SINGLE-LINE NOT
961 EQUAL TO
962 ⪉ ⪊ U+2A89, U+2A8A LESS-THAN/GREATER-THAN AND NOT APPROXIMATE
963 ⪍ ⪎ U+2A8D, U+2A8E LESS-THAN/GREATER-THAN ABOVE SIMILAR OR EQUAL
964 ⪕ ⪖ U+2A95, U+2A96 SLANTED EQUAL TO OR LESS-THAN/GREATER-THAN
965 ⪗ ⪘ U+2A97, U+2A98 SLANTED EQUAL TO OR LESS-THAN/GREATER-THAN WITH
966 DOT INSIDE
967 ⪙ ⪚ U+2A99, U+2A9A DOUBLE-LINE EQUAL TO OR LESS-THAN/GREATER-THAN
968 ⪛ ⪜ U+2A9B, U+2A9C DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN/
969 GREATER-THAN
970 ⪝ ⪞ U+2A9D, U+2A9E SIMILAR OR LESS-THAN/GREATER-THAN
971 ⪟ ⪠ U+2A9F, U+2AA0 SIMILAR ABOVE LESS-THAN/GREATER-THAN ABOVE
972 EQUALS SIGN
973 ⪡ ⪢ U+2AA1, U+2AA2 DOUBLE NESTED LESS-THAN/GREATER-THAN
974 ⪦ ⪧ U+2AA6, U+2AA7 LESS-THAN/GREATER-THAN CLOSED BY CURVE
975 ⪨ ⪩ U+2AA8, U+2AA9 LESS-THAN/GREATER-THAN CLOSED BY CURVE ABOVE
976 SLANTED EQUAL
977 ⫷ ⫸ U+2AF7, U+2AF8 TRIPLE NESTED LESS-THAN/GREATER-THAN
978 ⫹ ⫺ U+2AF9, U+2AFA DOUBLE-LINE SLANTED LESS-THAN/GREATER-THAN OR
979 EQUAL TO
9c9853e8 980 ⸂ ⸃ U+2E02, U+2E03 LEFT/RIGHT SUBSTITUTION BRACKET
835f2666 981 ⸃ ⸂ U+2E03, U+2E02 RIGHT/LEFT SUBSTITUTION BRACKET
9c9853e8 982 ⸄ ⸅ U+2E04, U+2E05 LEFT/RIGHT DOTTED SUBSTITUTION BRACKET
835f2666 983 ⸅ ⸄ U+2E05, U+2E04 RIGHT/LEFT DOTTED SUBSTITUTION BRACKET
9c9853e8 984 ⸉ ⸊ U+2E09, U+2E0A LEFT/RIGHT TRANSPOSITION BRACKET
835f2666 985 ⸊ ⸉ U+2E0A, U+2E09 RIGHT/LEFT TRANSPOSITION BRACKET
9c9853e8 986 ⸌ ⸍ U+2E0C, U+2E0D LEFT/RIGHT RAISED OMISSION BRACKET
835f2666 987 ⸍ ⸌ U+2E0D, U+2E0C RIGHT/LEFT RAISED OMISSION BRACKET
9c9853e8 988 ⸜ ⸝ U+2E1C, U+2E1D LEFT/RIGHT LOW PARAPHRASE BRACKET
835f2666 989 ⸝ ⸜ U+2E1D, U+2E1C RIGHT/LEFT LOW PARAPHRASE BRACKET
9c9853e8 990 ⸠ ⸡ U+2E20, U+2E21 LEFT/RIGHT VERTICAL BAR WITH QUILL
835f2666 991 ⸡ ⸠ U+2E21, U+2E20 RIGHT/LEFT VERTICAL BAR WITH QUILL
9c9853e8
KW
992 ⸢ ⸣ U+2E22, U+2E23 TOP LEFT/RIGHT HALF BRACKET
993 ⸤ ⸥ U+2E24, U+2E25 BOTTOM LEFT/RIGHT HALF BRACKET
994 ⸦ ⸧ U+2E26, U+2E27 LEFT/RIGHT SIDEWAYS U BRACKET
995 ⸨ ⸩ U+2E28, U+2E29 LEFT/RIGHT DOUBLE PARENTHESIS
565fbe1b
KW
996 ⹂ „ U+2E42, U+201E DOUBLE LOW-REVERSED-9 QUOTATION MARK, DOUBLE
997 LOW-9 QUOTATION MARK
9c9853e8
KW
998 ⹕ ⹖ U+2E55, U+2E56 LEFT/RIGHT SQUARE BRACKET WITH STROKE
999 ⹗ ⹘ U+2E57, U+2E58 LEFT/RIGHT SQUARE BRACKET WITH DOUBLE STROKE
1000 ⹙ ⹚ U+2E59, U+2E5A TOP HALF LEFT/RIGHT PARENTHESIS
1001 ⹛ ⹜ U+2E5B, U+2E5C BOTTOM HALF LEFT/RIGHT PARENTHESIS
1002 〈 〉 U+3008, U+3009 LEFT/RIGHT ANGLE BRACKET
1003 《 》 U+300A, U+300B LEFT/RIGHT DOUBLE ANGLE BRACKET
1004 「 」 U+300C, U+300D LEFT/RIGHT CORNER BRACKET
1005 『 』 U+300E, U+300F LEFT/RIGHT WHITE CORNER BRACKET
1006 【 】 U+3010, U+3011 LEFT/RIGHT BLACK LENTICULAR BRACKET
1007 〔 〕 U+3014, U+3015 LEFT/RIGHT TORTOISE SHELL BRACKET
1008 〖 〗 U+3016, U+3017 LEFT/RIGHT WHITE LENTICULAR BRACKET
1009 〘 〙 U+3018, U+3019 LEFT/RIGHT WHITE TORTOISE SHELL BRACKET
1010 〚 〛 U+301A, U+301B LEFT/RIGHT WHITE SQUARE BRACKET
565fbe1b
KW
1011 〝 〞 U+301D, U+301E REVERSED DOUBLE PRIME QUOTATION MARK, DOUBLE
1012 PRIME QUOTATION MARK
1df06fae 1013 ﴿ ﴾ U+FD3F, U+FD3E ORNATE RIGHT/LEFT PARENTHESIS
9c9853e8
KW
1014 ﹙ ﹚ U+FE59, U+FE5A SMALL LEFT/RIGHT PARENTHESIS
1015 ﹛ ﹜ U+FE5B, U+FE5C SMALL LEFT/RIGHT CURLY BRACKET
1016 ﹝ ﹞ U+FE5D, U+FE5E SMALL LEFT/RIGHT TORTOISE SHELL BRACKET
7e4a71c6 1017 ﹤ ﹥ U+FE64, U+FE65 SMALL LESS-THAN/GREATER-THAN SIGN
9c9853e8 1018 ( ) U+FF08, U+FF09 FULLWIDTH LEFT/RIGHT PARENTHESIS
7e4a71c6 1019 < > U+FF1C, U+FF1E FULLWIDTH LESS-THAN/GREATER-THAN SIGN
9c9853e8
KW
1020 [ ] U+FF3B, U+FF3D FULLWIDTH LEFT/RIGHT SQUARE BRACKET
1021 { } U+FF5B, U+FF5D FULLWIDTH LEFT/RIGHT CURLY BRACKET
1022 ⦅ ⦆ U+FF5F, U+FF60 FULLWIDTH LEFT/RIGHT WHITE PARENTHESIS
1023 「 」 U+FF62, U+FF63 HALFWIDTH LEFT/RIGHT CORNER BRACKET
1024
69bcf1d3
FC
1025=head1 FEATURE BUNDLES
1026
1027It's possible to load multiple features together, using
1028a I<feature bundle>. The name of a feature bundle is prefixed with
1029a colon, to distinguish it from an actual feature.
1030
1031 use feature ":5.10";
1032
1033The following feature bundles are available:
1034
1035 bundle features included
1036 --------- -----------------
2b3fe414 1037PODTURES
69bcf1d3
FC
1038The C<:default> bundle represents the feature set that is enabled before
1039any C<use feature> or C<no feature> declaration.
1040
1041Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
1042no effect. Feature bundles are guaranteed to be the same for all sub-versions.
1043
1044 use feature ":5.14.0"; # same as ":5.14"
1045 use feature ":5.14.1"; # same as ":5.14"
1046
1047=head1 IMPLICIT LOADING
1048
1049Instead of loading feature bundles by name, it is easier to let Perl do
1050implicit loading of a feature bundle for you.
1051
1052There are two ways to load the C<feature> pragma implicitly:
1053
1054=over 4
1055
1056=item *
1057
1058By using the C<-E> switch on the Perl command-line instead of C<-e>.
1059That will enable the feature bundle for that version of Perl in the
1060main compilation unit (that is, the one-liner that follows C<-E>).
1061
1062=item *
1063
1064By explicitly requiring a minimum Perl version number for your program, with
1065the C<use VERSION> construct. That is,
1066
1067 use v5.10.0;
1068
1069will do an implicit
1070
39ec54a5 1071 no feature ':all';
69bcf1d3
FC
1072 use feature ':5.10';
1073
1074and so on. Note how the trailing sub-version
1075is automatically stripped from the
1076version.
1077
1078But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
1079
1080 use 5.010;
1081
1082with the same effect.
1083
1084If the required version is older than Perl 5.10, the ":default" feature
1085bundle is automatically loaded instead.
1086
affe54fa
AC
1087Unlike C<use feature ":5.12">, saying C<use v5.12> (or any higher version)
1088also does the equivalent of C<use strict>; see L<perlfunc/use> for details.
1089
69bcf1d3
FC
1090=back
1091
7e18321c
TC
1092=head1 CHECKING FEATURES
1093
1094C<feature> provides some simple APIs to check which features are enabled.
1095
1096These functions cannot be imported and must be called by their fully
1097qualified names. If you don't otherwise need to set a feature you will
1098need to ensure C<feature> is loaded with:
1099
1100 use feature ();
1101
1102=over
1103
1104=item feature_enabled($feature)
1105
1106=item feature_enabled($feature, $depth)
1107
1108 package MyStandardEnforcer;
1109 use feature ();
1110 use Carp "croak";
1111 sub import {
1112 croak "disable indirect!" if feature::feature_enabled("indirect");
1113 }
1114
1115Test whether a named feature is enabled at a given level in the call
1116stack, returning a true value if it is. C<$depth> defaults to 1,
1117which checks the scope that called the scope calling
1118feature::feature_enabled().
1119
1120croaks for an unknown feature name.
1121
1122=item features_enabled()
1123
1124=item features_enabled($depth)
1125
1126 package ReportEnabledFeatures;
1127 use feature "say";
1128 sub import {
1129 say STDERR join " ", feature::features_enabled();
1130 }
1131
1132Returns a list of the features enabled at a given level in the call
1133stack. C<$depth> defaults to 1, which checks the scope that called
1134the scope calling feature::features_enabled().
1135
1136=item feature_bundle()
1137
1138=item feature_bundle($depth)
1139
1140Returns the feature bundle, if any, selected at a given level in the
1141call stack. C<$depth> defaults to 1, which checks the scope that called
1142the scope calling feature::feature_bundle().
1143
1144Returns an undefined value if no feature bundle is selected in the
1145scope.
1146
1147The bundle name returned will be for the earliest bundle matching the
1148selected bundle, so:
1149
1150 use feature ();
1151 use v5.12;
1152 BEGIN { print feature::feature_bundle(0); }
1153
1154will print C<5.11>.
1155
1156This returns internal state, at this point C<use v5.12;> sets the
1157feature bundle, but C< use feature ":5.12"; > does not set the feature
1158bundle. This may change in a future release of perl.
1159
1160=back
1161
69bcf1d3
FC
1162=cut
1163
1164sub import {
22055af9 1165 shift;
36143a0c
NC
1166
1167 if (!@_) {
69bcf1d3
FC
1168 croak("No features specified");
1169 }
36143a0c 1170
d3757264 1171 __common(1, @_);
69bcf1d3
FC
1172}
1173
1174sub unimport {
22055af9 1175 shift;
69bcf1d3 1176
39ec54a5 1177 # A bare C<no feature> should reset to the default bundle
69bcf1d3 1178 if (!@_) {
39ec54a5
RS
1179 $^H &= ~($hint_uni8bit|$hint_mask);
1180 return;
69bcf1d3
FC
1181 }
1182
d3757264
NC
1183 __common(0, @_);
1184}
1185
1186
1187sub __common {
1188 my $import = shift;
0c8d5017
NC
1189 my $bundle_number = $^H & $hint_mask;
1190 my $features = $bundle_number != $hint_mask
9f601cf3 1191 && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
0c8d5017 1192 if ($features) {
da5b5421 1193 # Features are enabled implicitly via bundle hints.
d9ee6ccb
NC
1194 # Delete any keys that may be left over from last time.
1195 delete @^H{ values(%feature) };
1196 $^H |= $hint_mask;
1197 for (@$features) {
1198 $^H{$feature{$_}} = 1;
1199 $^H |= $hint_uni8bit if $_ eq 'unicode_strings';
1200 }
da5b5421 1201 }
69bcf1d3
FC
1202 while (@_) {
1203 my $name = shift;
1204 if (substr($name, 0, 1) eq ":") {
1205 my $v = substr($name, 1);
1206 if (!exists $feature_bundle{$v}) {
1207 $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
1208 if (!exists $feature_bundle{$v}) {
1209 unknown_feature_bundle(substr($name, 1));
1210 }
1211 }
1212 unshift @_, @{$feature_bundle{$v}};
1213 next;
1214 }
36143a0c 1215 if (!exists $feature{$name}) {
db629560
FC
1216 if (exists $noops{$name}) {
1217 next;
1218 }
c22e17d0
DIM
1219 if (!$import && exists $removed{$name}) {
1220 next;
1221 }
69bcf1d3 1222 unknown_feature($name);
69bcf1d3 1223 }
d3757264
NC
1224 if ($import) {
1225 $^H{$feature{$name}} = 1;
1226 $^H |= $hint_uni8bit if $name eq 'unicode_strings';
1227 } else {
69bcf1d3
FC
1228 delete $^H{$feature{$name}};
1229 $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
1230 }
1231 }
1232}
1233
1234sub unknown_feature {
1235 my $feature = shift;
1236 croak(sprintf('Feature "%s" is not supported by Perl %vd',
1237 $feature, $^V));
1238}
1239
1240sub unknown_feature_bundle {
1241 my $feature = shift;
1242 croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',
1243 $feature, $^V));
1244}
1245
1246sub croak {
1247 require Carp;
1248 Carp::croak(@_);
1249}
1250
7e18321c
TC
1251sub features_enabled {
1252 my ($depth) = @_;
1253
1254 $depth //= 1;
1255 my @frame = caller($depth+1)
1256 or return;
1257 my ($hints, $hinthash) = @frame[8, 10];
1258
1259 my $bundle_number = $hints & $hint_mask;
1260 if ($bundle_number != $hint_mask) {
1261 return $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]}->@*;
1262 }
1263 else {
1264 my @features;
1265 for my $feature (sort keys %feature) {
1266 if ($hinthash->{$feature{$feature}}) {
1267 push @features, $feature;
1268 }
1269 }
1270 return @features;
1271 }
1272}
1273
1274sub feature_enabled {
1275 my ($feature, $depth) = @_;
1276
1277 $depth //= 1;
1278 my @frame = caller($depth+1)
1279 or return;
1280 my ($hints, $hinthash) = @frame[8, 10];
1281
1282 my $hint_feature = $feature{$feature}
1283 or croak "Unknown feature $feature";
1284 my $bundle_number = $hints & $hint_mask;
1285 if ($bundle_number != $hint_mask) {
1286 my $bundle = $hint_bundles[$bundle_number >> $hint_shift];
1287 for my $bundle_feature ($feature_bundle{$bundle}->@*) {
1288 return 1 if $bundle_feature eq $feature;
1289 }
1290 return 0;
1291 }
1292 else {
1293 return $hinthash->{$hint_feature} // 0;
1294 }
1295}
1296
1297sub feature_bundle {
1298 my $depth = shift;
1299
1300 $depth //= 1;
1301 my @frame = caller($depth+1)
1302 or return;
1303 my $bundle_number = $frame[8] & $hint_mask;
1304 if ($bundle_number != $hint_mask) {
1305 return $hint_bundles[$bundle_number >> $hint_shift];
1306 }
1307 else {
1308 return undef;
1309 }
1310}
1311
69bcf1d3 13121;