[sf-perl] Advice on how to expose a class-wide preference

Shlomi Fish shlomif at iglu.org.il
Tue Mar 18 01:50:12 PDT 2008

Hi Anirvan!

On Tuesday 18 March 2008, Anirvan Chatterjee wrote:
> I'm looking for advice on how to expose a user-settable preference
> that affects the behavior of all objects in a given class. I'm working
> on a module representing data stringifiable in multiple ways, e.g.:
> 	$data->normalized
> 	$data->full
> 	$data->compact
> I'd like to set up string operator overloading, but it's not obvious
> what the default stringification style should be; different users will
> have different needs. I'd like to allow users to choose how objects
> will stringify by default in their code. I can imagine doing this in
> two different ways:
> 1) Have a class-wide preference indicating the default style:
> 	Class->default_string_style('normalized');
> 2) Let users set their preference via a magic variable:
> 	local $Class::default_string_style = 'normalized';
> The first option seems cleaner, and easier to subclass (were that an
> issue); it also allows for better error handling when the user calls
> the class method. Unfortunately, setting a class-wide flag also blows
> away any prior settings. Two pieces of code using the module will
> necessarily overwrite each other's preferences.
> Using a variable seems uglier, but allows users to safely intermix
> different preference values in different contexts.
> Any suggestions on which of these is generally better to use? Are
> there other strategies I'm ignoring? Thanks for any advice.

Another option I can think of is to make use of closures to define a certain 


$data->as_normalized(sub {
	# Here $data will stringify as normalized:
	print "$date";
# And here $data will revert back to its previous setting.


And naturally inside the closure you can safely set the setting to any other 
value, because it will be reverted at the end.


	Shlomi Fish

Shlomi Fish      shlomif at iglu.org.il
Homepage:        http://www.shlomifish.org/

I'm not an actor - I just play one on T.V.

More information about the SanFrancisco-pm mailing list