On Tuesday 09 October 2001 20:17, Kirrily Robert wrote:
> > Devel::Constants captures constant declarations (with the constant
> > pragma), allowing values to be resolved to their symbols at runtime.
> > It has a special method to resolve bitwise flag markers, such as
> > those found in a TCP packet.
> I've read this through three times and I still don't understand what
> you're talking about.
The constants pragma lets Perl turn names like PI and NEXT into values like
'3.14' and '1' at compile time. It's a lot easier and more maintanable to
use those names when programming. (Common sense.)
At runtime, unless the author has gone to some trouble, there's no easy way
of getting the name ('PI'), given the value ('3.14'). For some modules,
that's no problem -- people who muck about inside should know what they're
doing.
With a module such as NetPacket::TCP, trying to see what flags are set on a
packet doesn't work very well. The module defines constants corresponding to
bits, using boolean logic to set and unset these bits with the flags. Using
the module's published interface, attempting to read the flags returns a
number like '24' instead of 'RST ACK SYN' or whatever.
My solution is to overload constant::import, stashing away the names and
values, so they can be fetched at runtime.
Does that help?
-- chromatic