morgon has asked for the wisdom of the Perl Monks concerning the following question:

Hi!

Consider this (in P.pm):

package P; use strict; package P1; @P1::ISA = qw(P1); 1;
So within a file (containing package P) we have another package P1 that adds itself to it's own ISA.

In Perl 5.8.8 a "perl -MP -e1" does not complain, however Perl 5.10 refuses (and rightly so in my opinion) to compile it.

So evidently 5.10 has gotten smarter (which is a good thing) but unfortunately there are CPAN-modules (Parse::Lex to be specific) that exhibit exactly this problem.

This means that I had to change the source-code of a CPAN-module to make it run under 5.10 (ok - I already had to change the code to make it run under 5.8.8 but I mean just by upgrading to 5.10 I had to change it yet again...).

My question now is: Is there any systematic overview on which CPAN-modules may have a problem when running under 5.10?

Many thanks!

Replies are listed 'Best First'.
Re: recursive dependencies in 5.8.8 vs 5.10 and CPAN
by Anonymous Monk on Jul 03, 2009 at 19:47 UTC
    Infinite recursion is always a bug regardless of perl version
      What a great insight :-)

      The problem for me is:

      - there are evidently CPAN-modules out there with such errors
      - 5.10 handles this situation differently from 5.8.8.

      So the risk is (as I discovered today) that you can have a code-base depending on CPAN-modules that does not work anymore when you upgrade to 5.10.

      My question was wether there is any way to mitigate this risk...

        Mitigating the risk of there being a bug in module you will one day need?

        On the plus side, this particular bug should be easy to fix when encountered.

Re: recursive dependencies in 5.8.8 vs 5.10 and CPAN
by JavaFan (Canon) on Jul 03, 2009 at 22:30 UTC
    In Perl 5.8.8 a "perl -MP -e1" does not complain, however Perl 5.10 refuses (and rightly so in my opinion) to compile it.
    Wait. 5.8.8 DWIM, and 5.10 regresses and doesn't, and you think 5.10 is right? I'd think it's wrong for 5.10 to break code that runs fine in 5.8.8. Perl already knows how to lose itself into infinite recursion:
    $ cat A.pm use B; 1; $ cat B.pm use A; 1; $ perl -MA -we1 $
    See, no infinite recursion here, so it's not that hard.

    My question now is: Is there any systematic overview on which CPAN-modules may have a problem when running under 5.10?
    No. See, if it were known, it would have been fixed by the time 5.10 came out.

    Note you can prevent this from happening again. 5.10.1 will be here soon. TODAY is a good time to compile a snapshot of perl and test your code, and the CPAN modules you depend on, so you won't be caught off-guard by the time 5.10.1 hits the street.

      The OP talked about INHERITANCE. Your example leaves that out.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
        What's inheritance got to do with "I'm walking a graph. I keep track of where I have been. I don't visit nodes I've already visited. Look ma! I'm new and shiny 5.10. Now I can no longer keep track of where I've been"?
A reply falls below the community's threshold of quality. You may see it by logging in.