in reply to Variables versus Subroutines for a Configuration Module.

Would it be possible to change the values of the returns from the subs if the subs approach is used.

Yes, by doing some tricks with the symbol table:

use My::Config; no strict 'refs'; *'My::Config::DB_NAME' = sub { 'new_db' };

Are there any other factors that should be considered when making the choice.

Under certain conditions, subs declared with a prototype of () are considered for inlining (that's how use constant is implemented), which would make the sub method as fast as a hard-coded value. This is true as long as you don't call the sub as a class method. Example (which is tested on perl 5.8.0):

$ perl -MO=Deparse -e ' > package Foo; > sub bar () { "baz" } > package main; > print Foo::bar(), "\n"; > print Foo->bar(), "\n"; > ' -e syntax OK print 'baz', "\n"; print 'Foo'->bar, "\n";

----
I wanted to explore how Perl's closures can be manipulated, and ended up creating an object system by accident.
-- Schemer

Note: All code is untested, unless otherwise stated

Replies are listed 'Best First'.
Re: Re: Variables versus Subroutines for a Configuration Module.
by EvdB (Deacon) on Oct 10, 2003 at 16:43 UTC

    Using the () in the sub that is a great tip - thank you. I presume that as the values are being effectively hardcoded in dureng compile that this makes it impossible to change it during runtime.

    --tidiness is the memory loss of environmental mnemonics

      Indeed, this is the case.

      Makeshifts last the longest.