in reply to (jeffa) Re: Unique Array Entries
in thread Unique Array Entries

The idea is, once you have that structure, to walk down that structure, and each time you end up in a leaf (that is, you find no more children), to output the whole path you've taken :

# Just walk the created structure, and output # the name whenever we hit a leaf : sub walk { my ($hashref, $path) = @_; #print $path,"\n"; my @keys = keys %$hashref; if (@keys) { walk( $hashref->{$_}, $path . "/$_" ) foreach (@keys); } else { print "$path\n"; }; }; walk( \%thingy, "" );

Of course, the whole method of hashes has the problem of not maintaining the order of the keys, but it's not clear if that will be a problem for The_Rev :-))

perl -MHTTP::Daemon -MHTTP::Response -MLWP::Simple -e ' ; # The $d = new HTTP::Daemon and fork and getprint $d->url and exit;#spider ($c = $d->accept())->get_request(); $c->send_response( new #in the HTTP::Response(200,$_,$_,qq(Just another Perl hacker\n))); ' # web

Replies are listed 'Best First'.
Re: Re: (jeffa) Re: Unique Array Entries
by The_Rev (Acolyte) on Mar 02, 2002 at 16:48 UTC

    I think that your first snippet would work except for the fact that it does retain that typo: (Topology/Device=2/Port) Is there anyway to disregard that and have the following:

    Topology/IPClassA/Device/log_ratio Topology/IPClassA/Device/poll_interval Topology/Device=2/poll_interval Topology/Device=2/is_managed Topology/Device=2/Port/ifPhysAddress Topology/Device=2/Port/poll_interval Topology/IPClassC/Device/poll_interval Location

    I am traversing an hlist that I have built, and would like to utilize all of the unique strings elsewhere.

    Thanks

    2002-02-02 Edit by The Perlmonks Node Pixies : Added formatting

      I'm not completely sure I understand you. The output of both versions, jeffas and mine, is eight lines, and the line you don't seem to want is not included in either (both versions output eight lines, your sample output had nine lines. As far as I understand you, you want eight lines of output. Both versions should be easily reusable within any script, if you replace the print statements with some other statement collecting the strings into an array.

      perl -MHTTP::Daemon -MHTTP::Response -MLWP::Simple -e ' ; # The $d = new HTTP::Daemon and fork and getprint $d->url and exit;#spider ($c = $d->accept())->get_request(); $c->send_response( new #in the HTTP::Response(200,$_,$_,qq(Just another Perl hacker\n))); ' # web
      I also forgot to mention that my strings aren't static and they will change according to the input.
      I also forgot to mention that these strings are going to be created dynamically, and won't always appear as in my example. Thanks