in reply to Need help in accessing subroutines in perl scripts in perl modules.

This post is a verbatim copy of my answer from StackOverflow, with the example slurped from one of my comments.

require happens at runtime, so in this code:

my @IP=getIP(); require "/tmp/utils/Log.pl"; require "/tmp/utils/Utili.pl";

getIP() has not yet been loaded from the "Utili.pl" file, so it's looking in its own scope for that sub. Move things around so that the subs get loaded before you call them:

require "/tmp/utils/Log.pl"; require "/tmp/utils/Utili.pl"; my @IP=getIP();

Here's an example. require returns 1 on success:

perl -E 'say 5; say require Data::Dumper' 5 1

update: Correction: as choroba points out below, require returns whatever comes last in the module on first pass, then just returns 1 on subsequent calls.

Replies are listed 'Best First'.
Re^2: Need help in accessing subroutines in perl scripts in perl modules.
by choroba (Cardinal) on Jun 17, 2016 at 12:57 UTC
    > require returns 1 on success:

    For the first time, require returns whatever comes last in the module. Next time for the same module, it returns just 1. See also Return values.

    $ perl -wE 'say require Syntax::Construct for 1, 2' Syntax::Construct 1

    ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

      Thanks for pointing that out, choroba!

        sorry, i have corrected that but forgot to update here.. still iam not able to access the subtoutines in test2.pm