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 )