in reply to Using Constants in Perl

What might be nice is something which did both:

use bimodal_constant FOO => "BAR"; print "\$FOO is $FOO\n" if FOO;

That seems as simple as:

package bimodal_constant; sub import { my ($class, $key, $value) = @_; my $caller = caller(); # constant scalar eval " *$caller\::$key = \\\"$value\" "; # constant sub eval " *$caller\::$key = sub () { \"$value\" } "; } 1;

When used with the example at the top, it prints "$FOO is BAR" as expected.

Of course, a shorter name would be helpful.

Update: glancing at the source for constant, there is a lot of sanity checking so it's not quite that easy, but the sanity checks could be cut and paste. All the action is in the last few lines of code.

-xdg

Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

Replies are listed 'Best First'.