Stewart Anderson wrote:
>> From: mrstevegross [mailto:[EMAIL PROTECTED]
>>
>> I have a package named "Foo" in which I want to define some package-
>> level constants (such as $VAR="soemval"). I want those constants
>> available to users of package Foo, so the following code would work:
>>
>> === foo.pl ===
>> package foo;
>> use constant VAR => "someval";
>>
>> === bar.pl ===
>> use foo;
>> print $foo::VAR;
>>
>> It doesn't appear to be working; it compiles ok, but it prints
>> nothing. I thought it would print "someval".
>>
> That looks interesting.  How do  people use that kind of constant
> assignment.  I can see uses for it, but would be interested to hear what
> others use this technique for.

Take a look at

  perldoc constant

What the pragma creates is a prototyped subroutine with exactly zero parameters,
so writing

  use constant PI => 3.14159265359;

is equivalent to a subroutine

  sub PI() {
    3.14159265359;
  }

However it has a few of advantages over just writing this directly:

- It is self-documenting, i.e. it is clear that a named constant is being
  defined.

- The Perl compiler has a chance to optimise out the subroutine definition and
  call

- The implementation could change to something more optimal in the future
  without needing to alter any code that uses the pragma

I hope this helps,

Rob

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to