Using package constant to define your named constants, is somewhat more efficient that using a hash to perform the mapping:
#! perl -slw use strict; use Benchmark qw[ cmpthese ]; package C; use constant { RED => 0xFF0000, BLUE => 0x00FF00, GREEN => 0x0000FF, }; package main; use constant { RED => 0xFF0000, BLUE => 0x00FF00, GREEN => 0x0000FF, }; my %colors = ( RED => 0xFF0000, BLUE => 0x00FF00, GREEN => 0x0000FF, ); open STDERR, ">nul"; cmpthese -1, { hash => sub{ warn $colors{ RED }, $colors{ BLUE }. $colors{ GRE +EN }; }, m_const => sub{ warn RED, BLUE. GREEN; }, p_const => sub{ warn C::RED, C::BLUE. C::GREEN; }, }; __END__ P:\test>junk Rate hash m_const p_const hash 116531/s -- -11% -12% m_const 130636/s 12% -- -1% p_const 132428/s 14% 1% -- P:\test>junk Rate hash p_const m_const hash 116531/s -- -9% -10% p_const 128577/s 10% -- -1% m_const 129366/s 11% 1% -- P:\test>junk Rate hash m_const p_const hash 116642/s -- -10% -10% m_const 129468/s 11% -- -0% p_const 129590/s 11% 0% --
If you're concerned with the namespace pollution of having 7000 constants in your main package (though if you make them all uppercase it precludes most possibilities of collisions), then you could place them into separate (short-named) package and invoke them via their full names as in m_const above.
In reply to Re: Getting numeric value of a alphabetic string
by BrowserUk
in thread Getting numeric value of an alphabetic string
by chakkaln
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |