Mandalika's scratchpad | [ Work blog @Oracle | My Music Compositions ] |
Old Posts: 09.04 10.04 11.04 12.04 01.05 02.05 03.05 04.05 05.05 06.05 07.05 08.05 09.05 10.05 11.05 12.05 01.06 02.06 03.06 04.06 05.06 06.06 07.06 08.06 09.06 10.06 11.06 12.06 01.07 02.07 03.07 04.07 05.07 06.07 08.07 09.07 10.07 11.07 12.07 01.08 02.08 03.08 04.08 05.08 06.08 07.08 08.08 09.08 10.08 11.08 12.08 01.09 02.09 03.09 04.09 05.09 06.09 07.09 08.09 09.09 10.09 11.09 12.09 01.10 02.10 03.10 04.10 05.10 06.10 07.10 08.10 09.10 10.10 11.10 12.10 01.11 02.11 03.11 04.11 05.11 07.11 08.11 09.11 10.11 11.11 12.11 01.12 02.12 03.12 04.12 05.12 06.12 07.12 08.12 09.12 10.12 11.12 12.12 01.13 02.13 03.13 04.13 05.13 06.13 07.13 08.13 09.13 10.13 11.13 12.13 01.14 02.14 03.14 04.14 05.14 06.14 07.14 09.14 10.14 11.14 12.14 01.15 02.15 03.15 04.15 06.15 09.15 12.15 01.16 03.16 04.16 05.16 06.16 07.16 08.16 09.16 12.16 01.17 02.17 03.17 04.17 06.17 07.17 08.17 09.17 10.17 12.17 01.18 02.18 03.18 04.18 05.18 06.18 07.18 08.18 09.18 11.18 12.18 01.19 02.19 05.19 06.19 08.19 10.19 11.19 05.20 10.20 11.20 12.20 09.21 11.21 12.22
By default new features are not enabled in Perl mainly to retain backward compatibility. Starting with release 5.10, latest features have to be enabled explicitly before using them. Here are a few ways to enable Perl features.
Enable new features with the help of -E
switch.
-E
is similar to -e switch except that -E
also enables all latest features. In other words, -E
switch on the Perl command line enables the feature bundle for that version of Perl in the main compilation unit. (see #4 below for enabling feature bundles explicitly).eg.,
% perl -e 'print $^V;' v5.16.3 % perl -e "print q(Hello)" Hello% ⏎ % perl -E "print q(Hello)" Hello% ⏎ % perl -e "say q(Hello)" syntax error at -e line 1, near "say q(Hello)" Execution of -e aborted due to compilation errors. % perl -E "say q(Hello)" Hello %
Enable one or more features selectively with the help of use feature
pragma.
use feature
pragma minimizes the risk of breaking existing programs as the specified feature will only be enabled within the scope of the pragma.eg.,
% cat -n enable_say.pl 1 #!/bin/perl 2 say("Hello") % ./enable_say.pl Undefined subroutine &main::say called at ./enable_say.pl line 2. % cat -n enable_say.pl 1 #!/bin/perl 2 use feature say; 3 say("Hello") % ./enable_say.pl Hello
To enable multiple features, spearate each one with spaces. eg., use feature qw(say state switch unicode_strings)
.
Enable all features available in the requested version with the help of use <VERSION>
directive.
use <VERSION>
disables any features not in the requested version's feature bundle. (see #4 below for enabling feature bundles explicitly). This is useful to check the current Perl version before using library modules that won't work with older versions of Perl.eg.,
% cat -n enable_say.pl 1 #!/bin/perl 2 say("Hello") % ./enable_say.pl Undefined subroutine &main::say called at ./enable_say.pl line 2. % cat -n enable_say.pl 1 #!/bin/perl 2 use v5.10; 3 say("Hello") % ./enable_say.pl Hello
Similar to use <VERSION>
directive, feature bundles help load multiple features together. Any feature bundle can be enabled with the help of use feature
":<FEATURE_BUNDLE>"
directive.
The colon that prefixes the feature bundle differentiates the bundle from an actual feature.
eg.,
To enable say, state, switch, unicode_strings, unicode_eval, evalbytes, current_sub
and fc
features, enable feature bundle 5.16 as shown below.
#!/bin/perl .. use feature ":5.16"; ..
Perl features available in various feature bundles are listed here.
Credit: various sources
Labels: Perl Enable+Features Feature+Bundles
2004-2019 |