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 


Thursday, February 28, 2019
 
Perl: Enabling Features

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.

  1. Enable new features with the help of -E switch.

    • Introduced in v5.10, -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
    %
    
  2. 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).

  3. 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
    
  4. 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:




Comments: Post a Comment



<< Home


2004-2019 

This page is powered by Blogger. Isn't yours?