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

Reply via email to