in reply to Switch and __DATA__

Pne more (very good) reason to always use strict and warnings, as that would have clearly pointed you to who's fault it is:

$ perl5.12.2 -we'use Switch' Switch will be removed from the Perl core distribution in the next maj +or release. Please install it from CPAN. It is being used at -e, line + 1. $

Switch is from 2009, and it has been deprecated in 5.12 and has been removed from 5.14 and up:

$ perl5.14.0 -we'use Switch' Can't locate Switch.pm in @INC (@INC contains: /media/Tux/perls/lib/si +te_perl/5.14.0/i686-linux-64int /media/Tux/perls/lib/site_perl/5.14.0 + /media/Tux/perls/lib/5.14.0/i686-linux-64int /media/Tux/perls/lib/5. +14.0 .) at -e line 1. BEGIN failed--compilation aborted at -e line 1. $

As already noted, don't use Switch. With recent perl versions, use given/when or for/when.

FWIW Switch makes your whole script barf on unpredictable points when you are using defined-or // which is way more useful than Switch.


Enjoy, Have FUN! H.Merijn

Replies are listed 'Best First'.
Re^2: Switch and __DATA__
by atend (Acolyte) on Jun 16, 2011 at 13:46 UTC

    My original script has use warnings and strict, but perl does not produce any warnings with "use Switch". I'm on Windows (Active State Perl) atm, I might add.

      I just tried with Strawberry, and it also does not issue a warning. It must be a Windows problem. I'll ping their maintainers.

      I hope my other information was useful for you though.


      Enjoy, Have FUN! H.Merijn

        ActiveState knows. They intentionally castrated deprecate to silence the warning.

        package deprecate; use strict; use warnings; our $VERSION = 0.01; # our %Config can ignore %Config::Config, e.g. for testing our %Config; unless (%Config) { require Config; *Config = \%Config::Config; } sub __import { # disarmed in ActivePerl ...

        Reinstalling deprecate should reactivate the warning. Seeing how it's not dual-lived, the easiest way to do this would be to edit the file to change «sub __import {  # disarmed in ActivePerl» back to «sub import {».

        Update: Fixed module name. Added last sentence.