Yes, it is a compile-time vs. run-time issue. You could enclose your require statement in a BEGIN{} block and do just fine.
As for your second question, you could have all your constants have a common prefix, like C_. Then, you can do a little introspection as so:
package Constants;
use base 'Exporter';
our @EXPORT = grep {
substr( $_, 0, 2 ) eq 'C_'
&& __PACKAGE__->can( $_ );
} keys %Constants::;
use constant C_FOO => 1;
use constant C_BAR => 2;
use constant C_BAZ => 3;
The Perfect is the Enemy of the Good.