Why doesn't the code below print "mybase"?
In Perl, execution of a script doesn't necessarily happen top-to-bottom. Certain constructs, notably
BEGIN { }
blocks, are executed as they are encountered. The
use keyword is also processed when encountered, so that definitions it pulls in are available as the rest of the script is compiling. In your script, this means that
use constant BASE => $Base;
is being executed
before $Base has been assigned a value. Since the purpose of the
constant module is to establish constants, simply rewriting that line to
use constant BASE => 'mybase';
is sufficient.