http://www.perlmonks.org?node_id=946624


in reply to Re^3: Module not included but present in %INC!
in thread Module not included but present in %INC!

Thanks for your reply Corion
I reduced my pm file and wrote another .pl so as to reproduce the problem. Here they are: The test.pl file, which includes the .pm file:
#!/usr/bin/perl use strict; use warnings; use Dante::Correlation::CorrelationEngine; my $correlationEngine = Dante::Correlation::CorrelationEngine->new(1); $correlationEngine->testFunction(); exit;
The CorrelationEngine.pm file:
# # Dante::Correlation::CorrelationEngine.pm - Implements top-level co +rrelation logic. # ########## use strict; use warnings; use Date::Parse; # There are a bunch of other .pm includes here, but they are modules f +or the project, not any other perl module # There are other functions here, not listed, of course sub testFunction { print str2time("2011-03-18 02:39:04") . "\n"; print str2time("1970-01-01 00:00:10") . "\n"; print str2time("2012-01-05 14:23:09") . "\n"; } # Must return 1 for the class to be compilable. 1; # End of Dante::Correlation::CorrelationEngine.pm
Executing test.pl results in following error:
./test2.pl Undefined subroutine &Dante::Correlation::CorrelationEngine::str2time +called at Dante/Correlation/CorrelationEngine.pm line 664.

So if the culprit is CorrelationEngine.pm, how can I make sure it loads Date::Parse?
I'm at my wits end with this now; seems so simple, can't figure out why its not working.
Please help!
Trupti

Replies are listed 'Best First'.
Re^5: Module not included but present in %INC!
by Eliya (Vicar) on Jan 06, 2012 at 17:07 UTC

    You presumably have the package Dante::Correlation::CorrelationEngine declaration after the use Date::Parse statement — in which case the functions (like str2time) will be exported into main::, not Dante::Correlation::CorrelationEngine.

    When I put the package statement in the appropriate place, and add a constructor, the code works fine for me.

Re^5: Module not included but present in %INC!
by toolic (Bishop) on Jan 06, 2012 at 17:41 UTC
    I modified test.pl and your .pm file. This works for me:
    $ find . . ./test.pl ./Dante ./Dante/Correlation ./Dante/Correlation/CorrelationEngine.pm $ $ $ cat Dante/Correlation/CorrelationEngine.pm # # Dante::Correlation::CorrelationEngine.pm - Implements top-level co +rrelation logic. # ########## package Dante::Correlation::CorrelationEngine; use strict; use warnings; use Date::Parse; # There are a bunch of other .pm includes here, but they are modules f +or the project, not any other perl module # There are other functions here, not listed, of course sub testFunction { print str2time("2011-03-18 02:39:04") . "\n"; print str2time("1970-01-01 00:00:10") . "\n"; print str2time("2012-01-05 14:23:09") . "\n"; } # Must return 1 for the class to be compilable. 1; # End of Dante::Correlation::CorrelationEngine.pm $ $ cat ./test.pl #!/usr/bin/env perl use warnings; use strict; use Dante::Correlation::CorrelationEngine; Dante::Correlation::CorrelationEngine::testFunction(); $ $ $ ./test.pl 1300430344 18010 1325791389 $
      Hello all!

      Yes indeed, the problem was where the package declaration went, and I'd put it after loading strict, warning, all other modules and of course, the Date::Parse module.
      I changed it and whew! Now it works :) Thank you everybody; I completely overlooked the package declaration line; oopsie!
      Thank you for your time and effort everybody, it is much appreciated :)

      Trupti
Re^5: Module not included but present in %INC!
by choroba (Cardinal) on Jan 06, 2012 at 16:57 UTC
    Where is the package declaration?