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 |