/usr/share/perl/5.22.1/feature.pod is in perl-doc 5.22.1-9ubuntu0.6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 | =head1 NAME
feature - Perl pragma to enable new features
=head1 SYNOPSIS
use feature qw(say switch);
given ($foo) {
when (1) { say "\$foo == 1" }
when ([2,3]) { say "\$foo == 2 || \$foo == 3" }
when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" }
when ($_ > 100) { say "\$foo > 100" }
default { say "None of the above" }
}
use feature ':5.10'; # loads all features available in perl 5.10
use v5.10; # implicitly loads :5.10 feature bundle
=head1 DESCRIPTION
It is usually impossible to add new syntax to Perl without breaking
some existing programs. This pragma provides a way to minimize that
risk. New syntactic constructs, or new semantic meanings to older
constructs, can be enabled by C<use feature 'foo'>, and will be parsed
only when the appropriate feature pragma is in scope. (Nevertheless, the
C<CORE::> prefix provides access to all Perl keywords, regardless of this
pragma.)
=head2 Lexical effect
Like other pragmas (C<use strict>, for example), features have a lexical
effect. C<use feature qw(foo)> will only make the feature "foo" available
from that point to the end of the enclosing block.
{
use feature 'say';
say "say is available here";
}
print "But not here.\n";
=head2 C<no feature>
Features can also be turned off by using C<no feature "foo">. This too
has lexical effect.
use feature 'say';
say "say is available here";
{
no feature 'say';
print "But not here.\n";
}
say "Yet it is here.";
C<no feature> with no features specified will reset to the default group. To
disable I<all> features (an unusual request!) use C<no feature ':all'>.
=head1 AVAILABLE FEATURES
=head2 The 'say' feature
C<use feature 'say'> tells the compiler to enable the Perl 6 style
C<say> function.
See L<perlfunc/say> for details.
This feature is available starting with Perl 5.10.
=head2 The 'state' feature
C<use feature 'state'> tells the compiler to enable C<state>
variables.
See L<perlsub/"Persistent Private Variables"> for details.
This feature is available starting with Perl 5.10.
=head2 The 'switch' feature
B<WARNING>: Because the L<smartmatch operator|perlop/"Smartmatch Operator"> is
experimental, Perl will warn when you use this feature, unless you have
explicitly disabled the warning:
no warnings "experimental::smartmatch";
C<use feature 'switch'> tells the compiler to enable the Perl 6
given/when construct.
See L<perlsyn/"Switch Statements"> for details.
This feature is available starting with Perl 5.10.
=head2 The 'unicode_strings' feature
C<use feature 'unicode_strings'> tells the compiler to use Unicode rules
in all string operations executed within its scope (unless they are also
within the scope of either C<use locale> or C<use bytes>). The same applies
to all regular expressions compiled within the scope, even if executed outside
it. It does not change the internal representation of strings, but only how
they are interpreted.
C<no feature 'unicode_strings'> tells the compiler to use the traditional
Perl rules wherein the native character set rules is used unless it is
clear to Perl that Unicode is desired. This can lead to some surprises
when the behavior suddenly changes. (See
L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are
potentially using Unicode in your program, the
C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
This feature is available starting with Perl 5.12; was almost fully
implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>.
=head2 The 'unicode_eval' and 'evalbytes' features
Under the C<unicode_eval> feature, Perl's C<eval> function, when passed a
string, will evaluate it as a string of characters, ignoring any
C<use utf8> declarations. C<use utf8> exists to declare the encoding of
the script, which only makes sense for a stream of bytes, not a string of
characters. Source filters are forbidden, as they also really only make
sense on strings of bytes. Any attempt to activate a source filter will
result in an error.
The C<evalbytes> feature enables the C<evalbytes> keyword, which evaluates
the argument passed to it as a string of bytes. It dies if the string
contains any characters outside the 8-bit range. Source filters work
within C<evalbytes>: they apply to the contents of the string being
evaluated.
Together, these two features are intended to replace the historical C<eval>
function, which has (at least) two bugs in it, that cannot easily be fixed
without breaking existing programs:
=over
=item *
C<eval> behaves differently depending on the internal encoding of the
string, sometimes treating its argument as a string of bytes, and sometimes
as a string of characters.
=item *
Source filters activated within C<eval> leak out into whichever I<file>
scope is currently being compiled. To give an example with the CPAN module
L<Semi::Semicolons>:
BEGIN { eval "use Semi::Semicolons; # not filtered here " }
# filtered here!
C<evalbytes> fixes that to work the way one would expect:
use feature "evalbytes";
BEGIN { evalbytes "use Semi::Semicolons; # filtered " }
# not filtered
=back
These two features are available starting with Perl 5.16.
=head2 The 'current_sub' feature
This provides the C<__SUB__> token that returns a reference to the current
subroutine or C<undef> outside of a subroutine.
This feature is available starting with Perl 5.16.
=head2 The 'array_base' feature
This feature supports the legacy C<$[> variable. See L<perlvar/$[> and
L<arybase>. It is on by default but disabled under C<use v5.16> (see
L</IMPLICIT LOADING>, below).
This feature is available under this name starting with Perl 5.16. In
previous versions, it was simply on all the time, and this pragma knew
nothing about it.
=head2 The 'fc' feature
C<use feature 'fc'> tells the compiler to enable the C<fc> function,
which implements Unicode casefolding.
See L<perlfunc/fc> for details.
This feature is available from Perl 5.16 onwards.
=head2 The 'lexical_subs' feature
B<WARNING>: This feature is still experimental and the implementation may
change in future versions of Perl. For this reason, Perl will
warn when you use the feature, unless you have explicitly disabled the
warning:
no warnings "experimental::lexical_subs";
This enables declaration of subroutines via C<my sub foo>, C<state sub foo>
and C<our sub foo> syntax. See L<perlsub/Lexical Subroutines> for details.
This feature is available from Perl 5.18 onwards.
=head2 The 'postderef' and 'postderef_qq' features
B<WARNING>: This feature is still experimental and the implementation may
change in future versions of Perl. For this reason, Perl will
warn when you use the feature, unless you have explicitly disabled the
warning:
no warnings "experimental::postderef";
The 'postderef' feature allows the use of L<postfix dereference
syntax|perlref/Postfix Dereference Syntax>. For example, it will make the
following two statements equivalent:
my @x = @{ $h->{a} };
my @x = $h->{a}->@*;
The 'postderef_qq' feature extends this, for array and scalar dereference, to
working inside of double-quotish interpolations.
This feature is available from Perl 5.20 onwards.
=head2 The 'signatures' feature
B<WARNING>: This feature is still experimental and the implementation may
change in future versions of Perl. For this reason, Perl will
warn when you use the feature, unless you have explicitly disabled the
warning:
no warnings "experimental::signatures";
This enables unpacking of subroutine arguments into lexical variables
by syntax such as
sub foo ($left, $right) {
return $left + $right;
}
See L<perlsub/Signatures> for details.
This feature is available from Perl 5.20 onwards.
=head2 The 'refaliasing' feature
B<WARNING>: This feature is still experimental and the implementation may
change in future versions of Perl. For this reason, Perl will
warn when you use the feature, unless you have explicitly disabled the
warning:
no warnings "experimental::refaliasing";
This enables aliasing via assignment to references:
\$a = \$b; # $a and $b now point to the same scalar
\@a = \@b; # to the same array
\%a = \%b;
\&a = \&b;
foreach \%hash (@array_of_hash_refs) {
...
}
See L<perlref/Assigning to References> for details.
This feature is available from Perl 5.22 onwards.
=head2 The 'bitwise' feature
B<WARNING>: This feature is still experimental and the implementation may
change in future versions of Perl. For this reason, Perl will
warn when you use the feature, unless you have explicitly disabled the
warning:
no warnings "experimental::bitwise";
This makes the four standard bitwise operators (C<& | ^ ~>) treat their
operands consistently as numbers, and introduces four new dotted operators
(C<&. |. ^. ~.>) that treat their operands consistently as strings. The
same applies to the assignment variants (C<&= |= ^= &.= |.= ^.=>).
See L<perlop/Bitwise String Operators> for details.
This feature is available from Perl 5.22 onwards.
=head1 FEATURE BUNDLES
It's possible to load multiple features together, using
a I<feature bundle>. The name of a feature bundle is prefixed with
a colon, to distinguish it from an actual feature.
use feature ":5.10";
The following feature bundles are available:
bundle features included
--------- -----------------
:default array_base
:5.10 say state switch array_base
:5.12 say state switch unicode_strings array_base
:5.14 say state switch unicode_strings array_base
:5.16 say state switch unicode_strings
unicode_eval evalbytes current_sub fc
:5.18 say state switch unicode_strings
unicode_eval evalbytes current_sub fc
:5.20 say state switch unicode_strings
unicode_eval evalbytes current_sub fc
:5.22 say state switch unicode_strings
unicode_eval evalbytes current_sub fc
The C<:default> bundle represents the feature set that is enabled before
any C<use feature> or C<no feature> declaration.
Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
no effect. Feature bundles are guaranteed to be the same for all sub-versions.
use feature ":5.14.0"; # same as ":5.14"
use feature ":5.14.1"; # same as ":5.14"
=head1 IMPLICIT LOADING
Instead of loading feature bundles by name, it is easier to let Perl do
implicit loading of a feature bundle for you.
There are two ways to load the C<feature> pragma implicitly:
=over 4
=item *
By using the C<-E> switch on the Perl command-line instead of C<-e>.
That will enable the feature bundle for that version of Perl in the
main compilation unit (that is, the one-liner that follows C<-E>).
=item *
By explicitly requiring a minimum Perl version number for your program, with
the C<use VERSION> construct. That is,
use v5.10.0;
will do an implicit
no feature ':all';
use feature ':5.10';
and so on. Note how the trailing sub-version
is automatically stripped from the
version.
But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
use 5.010;
with the same effect.
If the required version is older than Perl 5.10, the ":default" feature
bundle is automatically loaded instead.
=back
=cut
|