Scalar-Constant
view release on metacpan or search on metacpan
lib/Scalar/Constant.pm view on Meta::CPAN
package Scalar::Constant;
use strict;
use Carp;
use Scalar::Quote 'quote';
use Scalar::Util qw(looks_like_number);
use vars qw( $VERSION );
$VERSION = 0.001_005;
sub import {
my $module = shift;
my %constant = @_
or return;
my $calling_package = (caller)[0];
my @code;
while(my($name, $value) = each %constant) {
if(ref($value)) {
croak 'References are not supported';
}
if(! looks_like_number($value)) {
$value = quote($value);
}
push @code, sprintf('*%s::%s = \ %s;', $calling_package, $name, $value);
}
my $code = join("\n", @code);
eval $code
or confess "This shouldn't happen: $@";
}
1; # Magic true value required at end of module
__END__
=head1 NAME
Scalar::Constant - lightweight constant scalars.
=head1 SYNOPSIS
use Scalar::Constant
PI => 3.1415926535,
C => 299_792_458,
HI => 'hello world';
print "pi is $PI, and c is $C m/s\n";
$PI = 0; # dies with "Modification of a read-only value attempted at"
=head1 DESCRIPTION
This module gives you a simple way to define constant scalars. Unlike the constants created
with L<constant>, these can be interpolated into strings and used as hash keys.
=head1 CONFIGURATION AND ENVIRONMENT
Scalar::Constant requires no configuration files or environment variables.
=head1 DEPENDENCIES
L<Scalar::Quote>
=head1 INCOMPATIBILITIES
None reported.
=head1 BUGS AND LIMITATIONS
Only simple scalars i.e. numbers and strings are supported. Attempting to
define a constant with a reference value will result in an exception (compilation will be aborted).
( run in 0.950 second using v1.01-cache-2.11-cpan-ad19def0cd9 )