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/