in reply to Re: Print all derefs and method calls in a directory (Friday golf)
in thread Print all derefs and method calls in a directory (Friday golf)

Unless I'm missing something, the examples you have are fairly simply structured - I'm having to deal with calls like:
$people->{login}->{chair}->{height}
and each level is tampered with by a different module.

So in your examples I'd be seeing: for (@{$people->{login}->{desk}->{paperclips}){}

Replies are listed 'Best First'.
Re^3: Print all derefs and method calls in a directory (Friday golf)
by ikegami (Pope) on Jan 09, 2009 at 05:46 UTC

    There are four derefences in

    @{$people->{login}->{desk}->{paperclips}}

    but only three arrows.

    The rest of your post doesn't relate to what I said, so I have no comment on it save that I rarely have paths that long.

    for my $employee (@$employees) { for my $desk (@{ $employee->{desks} }) { $paperclips += $desk->{paperclips}; } }

    Four dereferences, but only two arrows. And the output of your script doesn't illustrate the structure at all. Data::Dumper will do that to some extent.

      I had to do this statically, because I didn't have full environment to run it in(so no Data::Dumper). I was trying to find the structure of a couple of large state hashes that get passed around, using only what I saw in the code. I'm sorry I wasn't clear about that.

      Both you and I might have written the code differently, but I had to tackle what was in front of me. This code has a lot of nested hash derefs, and when they are all listed by the command line, they form a convenient hierachy which shows the keys and sub-keys. A possible advantage over data dumper (in this case) is that it shows which keys are accessed by the program, rather than all the ones that exist.

        Both you and I might have written the code differently,

        Again, I didn't comment on that. My only beef was with your statement that everyone uses "->".

        because I didn't have full environment to run it in(so no Data::Dumper)

        I suggest you fix your broken install.