|Subject:||Load-order issue with SOAP::Constants|
|Date:||Fri, 01 May 2015 17:51:42 +0000|
|From:||Aran Deltac <firstname.lastname@example.org>|
perl -e 'use SOAP::Constants'
Use of uninitialized value $SOAP::Constants::WRONG_VERSION in concatenation (.) or string at /usr/local/share/perl/5.14.2/SOAP/Lite.pm line 3531.
perl -e 'use SOAP::Lite; use SOAP::Constants'
There is a load-order issue somewhere in here. I found this because @work we preload modules alphabetically before forking processes and SOAP::Constants comes before SOAP::Lite alphabetically.
Often the cause of load order issues is a simple circular dependency where module A depends on module B and module B depends on module A (A <-> B). A common fix would be to break out the dependent functionality into separate modules so that you have:
A -> C <- B
Where C is a new module that contians code from A and B which breaks the circular dependency. That doesn't always fix it logically, but some derivative of that pattern works in most cases.