in reply to Re^2: Behaviour on recursive use
in thread Behaviour on recursive use

Ok. What about the "C->TYPE" vs "C::TYPE", the first being the one that always works whatever the 'use' order. Is that a "runtime" vs "compile time", as you pointed out?

C->TYPE is method call (like "C"->TYPE or "C::"->TYPE or C::->TYPE )
and C::TYPE is a bareword
C::TYPE can be a function call or it can be a namespace , perl doesn't know ahead of time what it is

Once the constant C::TYPE is defined (constants are functions ) perl knows that C::TYPE is a function, so the code becomes C::TYPE()->... and not "C::TYPE"->...

If you write C::TYPE()->... perl knows ahead of time, before the TYPE constant is actually defined to treat it as a function call

This is talked about in perlobj and maybe even Modern Perl , so see those for more of these detail

Bottom line, lots of experts think having two modules use each other is mistake -- they should both use a third module -- you're not alone in trying this :) Circular module dependencies, Circular usage is poor design if you can't figure it out yourself, that is a giant hint that you should break the circle

Also, complex constants like these are, well, overrated in practice :)

Maybe see also Simple Module Tutorial and begincheck.pl and Circular use doesn't call import() as expected...?

Cheers, I'm just some nightowl

Replies are listed 'Best First'.
Re^4: Behaviour on recursive use
by locinus33 (Initiate) on Mar 10, 2014 at 15:47 UTC

    Well, thanks for those explanations! it makes it all clearer about Perl's interpretation.

    Yeah, I know for the circular dependencies, I have to work on it.

    Thanks !