http://qs321.pair.com?node_id=128195

dhable has asked for the wisdom of the Perl Monks concerning the following question:

I've been working on a script that accepts some command line parameters from the user. The first few lines in the program setup the constants I want to use in the rest of the program.
# Because of my C++ background use constant PROJECT => $ARGV[0]; use constant ARCHIVE => $ARGV[1]; # debuggging print "PROJECT value = " . PROJECT . "\n"; print "ARCHIVE value = " . ARCHIVE . "\n";
Later on in the program, I want to make a decision about the parameters, so I created the following if statment:
if( ARCHIVE eq "") { warn( "No archive file was supplied.\n"); exit 1201; }
Without specifying an ARCHIVE name, I would expect the script to die. It doesn't. So I started reading my trust Camel book on use constant. It said that constant is evaluated at compile time. That makes a lot of sense but my debug output shows:
PROJECT value = P:\Software ARCHIVE value =
Why is perl able to set the PROJECT value, but can't work with the lack of an ARCHIVE value? Is this an error with my copy of Perl (ActiveState 5.6.1)?