in reply to Re: Package module inclusion weirdness
in thread Package module inclusion weirdness

What makes you think it's being found? It certainly doesn't look like it is.

Because I read the logs that I posted :) To be fair, at first I thought the same thing. However the logs are a 'stack trace' of sorts. They go from the most recent subroutine called to the oldest, top to bottom. This means if you read from the bottom, you can follow the calls the programs made. Now look at this excerpt:

base::import('base', 'Quantum::Superpositions::Conj') called at /usr/l +ocal/share/perl/5.6.1/Quantum/Superpositions.pm line 350 Quantum::Superpositions::Conj::True::BEGIN() called at Quantum +/Superpositions/Conj.pm line 0

This shows that Quantum::Superpositions::Conj::True called a  use base 'Quantum::Superpositions::Conj';. For this to be possible, Quantum::Superpositions::Conj::True had to be found and loaded.

The next step (up) is where it all goes wrong. import gets called from 'base' (wherever that is), asking for 'Quantum::Superpositions::Conj'. However there is no Conj.pm file, it is a package in Superpositions.pm.

The silly thing is that to get to Quantum::Superpositions::Conj::True, perl had to read through Quantum::Superpositions::Conj to get to it! A check of line numbers confirms that perl did in fact execute the module Quantum::Superpositions::Conj::True correctly.

You are correct in saying that perl is not finding the module, but this is not because the module is not there. It has already found and executed them once! It's the second time through, to fulfil the 'use base' calls that is throwing the errors.

____________________
Jeremy
I didn't believe in evil until I dated it.

Replies are listed 'Best First'.
(tye)Re: Package module inclusion weirdness
by tye (Sage) on Oct 08, 2001 at 19:29 UTC

    This is a bug in the Q::S module. It appears to be assuming features of a new version of base.pm but doesn't spell out the requirements for such a version in its dependancies. Please report this bug to the author.

    The Superpostions.pm code does: use base 'Quantum::Superpositions::Conj'; and the documentation for base.pm says:

    use base qw(Foo Bar); [...is...] Roughly similar in effect to BEGIN { require Foo; require Bar; push @ISA, qw(Foo Bar); }
    and clearly "require Quantum::Superpositions::Conj" would fail since there is no Conj.pm file.

    The documentation for (my version) of base.pm also notes:

    If any of the base classes are not loaded yet, base silently requires them. Whether to require a base class package is determined by the absence of a global $VERSION in the base package. If $VERSION is not detected even after loading it, base will define $VERSION in the base package, setting it to the string "-1, defined by base.pm".
    but Superpositions.pm never sets $Quantum::Superpositions::Conj::VERSION.

    But since I doubt that Damian would release a module that just plain doesn't work at all, I assume that newer versions of base.pm also avoid require in other situations.

    BTW, an easy fix for this problem is adding:

    use vars qw($VERSION); BEGIN { $VERSION= $Quantum::Superpositions::VERSION }
    after the "package Quantum::Superpositions::Conj" line of the modue.

            - tye (but my friends call me "Tye")