in reply to For loop: Hash

My principles are:

So both on the router level and on the peer level you have plain lists, otherwise you have named attributes. So I would propose the following, which also allows for a simpler iteration over the structure:

use strict; use warnings; my $router_data = [ # array of hashes for each router { # hash for router 1 routerName => 'asr01', ipAddr => '1.1.1.1', bgpPeer => [ # array of hashes for each peer { # hash for first peer Name => 'PEER1', ASN => '111', prefixList => 'PREFIX-PEER1-OUT', }, { # hash for second peer Name => 'PEER2', ASN => '222', prefixList => 'PREFIX-PEER2-OUT', }, ], }, { # hash for router 2 routerName => 'asr02', ipAddr => '2.2.2.2', bgpPeer => [ # array of hashes for each peer { # hash for first peer Name => 'PEER1', ASN => '333', prefixList => 'PREFIX-PEER1-OUT', } ], }, ]; for my $router ( @$router_data ) { print $router->{routerName}." : \n"; for my $peer ( @{ $router->{bgpPeer} } ) { print $peer->{prefixList}."\n"; } }

Replies are listed 'Best First'.
Re^2: For loop: Hash
by admiral_grinder (Pilgrim) on Jul 02, 2013 at 16:27 UTC
    This is a great answer. To expand on it, the OP mentions that he is new to Perl, and perhaps an early programmer (or not, I don't know). Once you start using this layout, and you are finding that you need more logic and functionality against a Router, or a Peer, then it will be easy to break that part of the structure out into a class of its own.
Re^2: For loop: Hash
by nickt9999 (Acolyte) on Jul 04, 2013 at 10:24 UTC

    Many thanks for this.

    I have used this as the way forward.

    Cheers

    Nick