in reply to Re: Howto "use" backward compability packages of new "feature"s
in thread Howto "use" backward compability packages of new "feature"s

Thanks, unfortunately thats what I expected.

Prepending scripts with nine lines of code is not what I was hoping for.

(More something like a tricky modul which catches the "Fatal"-exception from the feature pragma and automatically overrides the CORE functions)

> You mentioned keys, but none of the features affect keys.

hmm ... apparently it only affects each.

I didn't check it, just believed what I was told in the post I linked too.

Cheers Rolf

  • Comment on Re^2: Howto "use" backward compability packages of new "feature"s

Replies are listed 'Best First'.
Re^3: Howto "use" backward compability packages of new "feature"s
by ikegami (Patriarch) on Aug 20, 2010 at 22:53 UTC

    What I said about keys applies to values and each as well. It's not a backward incompatible change, so no feature needs to be activated. Your code boils down to

    use if $] < 5.012, 'Enumerators';

    Prepending scripts with nine lines of code is not what I was hoping for.

    That's because you're trying to write your code inside out. A less messy approach would be to include Enumerators unconditionally, and let it decide if it needs to override each or not. It's not a detail the module's user should worry about.

    # use Enumerators -global; # use Enumerators qw( each ); # use Enumerators; package Enumerators; use Exporter qw( ); our @EXPORT = qw( each ); our @EXPORT_OK = qw( each ); sub import { my $class = shift; return if $[ >= 5.012; if ($_[0] eq '-global') { *CORE::GLOBAL::each = \&each; } else { goto &Exporter::import; } } sub each(\[@%]) { ... } 1;

    (Trim out what you don't want.)

    Note that this approach works for pragams too.

    package stricter; sub import { require strict; strict->import; require warnings; warnings->import; } 1;

    use stricter; does the same as use strict; use warnings;

      Thanks a lot for the "stricter" example, the possibility to import pragmas is owesome.

      Do you know where this is documented?

      BTW: just found an "if pragma" which could be used for backwards compatibility!

        use if $] < 5.008, "utf8";

      Cheers Rolf

        Where what is documented, the run-time equivalent of use? In use.

        just found an "if pragma" which could be used for backwards compatibility!

        You found it at the top of the post to which you replied.

        just found an "if pragma" which could be used for backwards compatibility!
        Ah, but if.pm has backwards compatability issues itself - it first appeared in 5.6.2 Here's what I use if I want to use warnings, but still want the code to be able to run in 5.005 (without warnings enabled of course):
        BEGIN { $INC{"warnings.pm"} = 1 if $] < 5.006; } use strict; use warnings;
        Note that if you want to be able to do no warnings, you have to create a dummy sub warnings::unimport as well.

        I've no reason to assume if.pm cannot be installed in 5.005. I just don't want another module dependency for what I can do in a single statement myself.