On Apr 4, 10:30 am, [EMAIL PROTECTED] (Rob Dixon) wrote:
> [EMAIL PROTECTED] wrote:
> > use constant PART_NUMBER            => 'P/N';
>
> > print PART_NUMBER;
>
> > The above prints, "P/N", as I would expect.  Later in the script I
> > want to access a hash value using the constant like this:
> > my $part = $parts{ $key }{ PART_NUMBER }; <- this doesn't work, but
> > this does:
> > my $part = $parts{ $key }{ 'P/N' }; <- works
>
> > Interesting enough if the constant is another package this would work:
> > my $part = $parts{ $key }{ SOME_PACKAGE::PART_NUMBER };
>
> > Any idea what I am doing wrong?
>
> If Perl sees a 'bareword' (a string composed entirely of alphanumerics
> and underscore) use as a hash key it will use it as a literal string.
> This makes the code tidier when you are using a constant string value
> for keys as there is no need to put it in quotes. In this case, however,
> you are accessing
>
>   $parts{ $key }{ 'PART_NUMBER' }
>
> which isn't what you want.
>
> There is a fix though. What 'use constant' does is to define a
> subroutine with the given name that returns the value you specify. You
> can force that subroutine to be called by writing
>
>   $parts{ $key }{ PART_NUMBER() }
>
> and you will get the desired result.
>
> HTH,
>
> Rob

Thanks Rob.  That explains a lot!


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


Reply via email to