On Mon, Mar 16, 2009 at 11:16, Suzanne Aardema <suzan...@athabascau.ca> wrote:
snip
> I do this regularly redefine constants in my programs. I'm not sure if it's 
> good practice but I do it.
>
> What I do is define a constant in most subroutines. The constant is called, 
> strange enough, PROC_NM. I felt that because this was being defined local to 
> each routine that I wasn't breaking all the rules I had been taught. I know I 
> get a warning message each time I redefine it but to me it is a local 
> constant not a variable. I don't define it in my helper routines so when they 
> printout an error message and reference PROC_NM I know where they are called 
> from.
>
> If anyone has a better idea I'd love to hear it.
snip

It sounds like you need Readonly::XS[1].  The constant pragma creates
constants by writing a subroutine like

sub PI() { 3.14 }

Subroutines are global in scope, so it doesn't matter that you are
using the constant only in one function.  Readonly::XS creates
constants by turning on a bit in the scalar that makes the variable
read only (hence its name).  Since this is a normal scalar, it can
have the scope you desire for it.  The Readonly[2] module also allows
you to create read only hashes and arrays (at the cost of some speed).

#!/usr/bin/perl

use strict;
use warnings;

use Readonly;

func1();
func2();

sub func1 {
        Readonly my $PROC_NM => (caller 0)[3];
        print "I am in $PROC_NM\n";
}

sub func2 {
        Readonly my $PROC_NM => (caller 0)[3];
        print "I am in $PROC_NM\n";
}

1. http://search.cpan.org/dist/Readonly-XS/XS.pm
2. http://search.cpan.org/dist/Readonly/Readonly.pm

-- 
Chas. Owens
wonkden.net
The most important skill a programmer can have is the ability to read.

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to