http://qs321.pair.com?node_id=375449


in reply to Re^3: Why is a hash the default "object" in oo perl?
in thread Why is a hash the default "object" in oo perl?

I have stepped on a key before, but it was easy to find with Data::Dumper.

Now I am in the habit of writing a little test program using the module. The test program uses Data::Dumper so that I can look at the object before writing something that will inherit from it.

This approach has been satisfactory unless the objects are overly large, complex, or numerous. There are several dimensions to this scalability problem:

  1. Length: The object is really long, such as Data::Dumper output that is more than 10,000 lines long.
  2. Depth: The data structure has too many levels, so that indentation is hard to follow. I typically start to lose insight somewhere between 5 and 10 levels of depth.
  3. Complexity: Since the hash values come out in a non-intuitive order, small things can get lost next to big things.
However, if I'm doing something this big and complex I usually have the time to do some research to figure it out.

My approach is not perfect. This may be why I don't use an IS_A relationship when a HAS_A relationship will probably work just as well in my immediate application.

It should work perfectly the first time! - toma
  • Comment on Re^4: Why is a hash the default "object" in oo perl?

Replies are listed 'Best First'.
Re^5: Why is a hash the default "object" in oo perl?
by crabbdean (Pilgrim) on Jul 19, 2004 at 23:38 UTC
    I recently just starting using Devel::Peek to look at my data structures. I love it. After reading the module doco you get an idea of the output from Devel::Peek and the structure of what you are seeing. It shows a wealth of data about your objects, hashes, variables, their types, reference counts, length, size, addresses and so on. It will even show what class your objects are blessed into. Very cool!

    Note: It will only show the first 4 elements of a structure unless you specify for it to show more by sending it an additional integer. eg. Devel::Peek::dump(\%hash, 8)

    For example this is 4 element dump of my %hash:
    SV = RV(0x1a7ba4c) at 0x1bd1e98 <<--## a scalar that is a ref REFCNT = 1 <<--## Its ref count FLAGS = (TEMP,ROK) RV = 0x1b5e014 <<--## The ref value SV = PVHV(0x1b25384) at 0x1b5e014 <<--## the scalar ref points to a + hash REFCNT = 2 <<--## The hashes ref count FLAGS = (PADBUSY,PADMY,SHAREKEYS) IV = 1 NV = 0 ARRAY = 0x1a49e84 (0:7, 1:1) hash quality = 100.0% KEYS = 1 FILL = 1 MAX = 7 RITER = -1 EITER = 0x0 Elt ".*" HASH = 0xaeb62926 <<--## First element of hash SV = RV(0x1a7ba3c) at 0x1bd1e8c <<--## is a scalar ref REFCNT = 1 FLAGS = (ROK) RV = 0x1bce2c4 SV = PVAV(0x1bcb7c4) at 0x1bce2c4 <<--## which points to an arra +y with 5 references REFCNT = 5 FLAGS = () IV = 0 NV = 0 ARRAY = 0x1a49634 FILL = 1 MAX = 1 ARYLEN = 0x0 FLAGS = (REAL) Elt No. 0 <<--## Element zero of that array SV = PV(0x1b3dbf0) at 0x1bd8098 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x1a4980c "return_me"\0 <<--## its value CUR = 9 LEN = 10 Elt No. 1 <<--## ... and so on SV = PV(0x1a6097c) at 0x1bd80b0 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x1a49834 "fullfile"\0 CUR = 8
    Anyway, it blows my hair back :-)

    Dean
    The Funkster of Mirth
    Programming these days takes more than a lone avenger with a compiler. - sam
    RFC1149: A Standard for the Transmission of IP Datagrams on Avian Carriers
      Devel::Peek is geared to people debugging perl internals - this isn't the tool you'd normally use when just trying to discover the structure of something. Data::Dumper is the built-in natural for that. demerphq's Data::Dump::Streamer is a separate install but it gets even closer to the actual structure.