At 11:02 AM -0700 9/4/09, Noah Garrett Wallach wrote:
Hi there,

I am having some trouble understanding hash of hashes here. I want to find all the keys for %policy{'policy_statement'}

    for my $line (@lines) {
        for my $key ( keys %policy{'policy_statement'} ) {


%policy is a hash.

$policy{policy_statement} (quotes not needed in this case) is a scalar value of the element with key 'policy_statement'. The scalar value is a reference to a hash.

Therefore, %{$policy{policy_statement}} is the hash to which this value refers. You can occasionally leave out the outer set of braces, but not in this case.

So change the above to

 for my $key ( keys %{$policy{'policy_statement'}} ) {

Elements of the second-level hash and deeper hashes may be referred to with the following:

  $policy{key1}->{key2}
  $policy{key1}->{key2}->{key3}

etc. In this case you may leave out the -> symbols.


if ($line =~ /set\sprotocols\sbgp\sgroup\s(\S+)\s(import|export).*?$key\s/) {
                $policy{'policy_statement'}{$key} = 2;
                $policy{'policy_statement'}{$key}{'group_name'}{$1} = 1;
                $policy{'policy_statement'}{$key}{'policy_type'}{$2} = 1;


The rest looks OK, and compiles.


--
Jim Gibson
j...@gibson.org

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to