Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re^2: Multiple Array Loops

by k_grdn (Novice)
on Oct 12, 2008 at 20:16 UTC ( [id://716706]=note: print w/replies, xml ) Need Help??


in reply to Re: Multiple Array Loops
in thread Multiple Array Loops

Thanks Both

I have tested both pieces of code, this will aid me in development of future progs.

Be good not to use for loops for all my progs!

nobull do you think you could explain your code? I have gone through and would like to better understand the use of references. I am having problems dereferencing the hash looping and printing the keys and values this is just for clarity. Many Thanks

k_grdn

Replies are listed 'Best First'.
Re^3: Multiple Array Loops
by k_grdn (Novice) on Oct 12, 2008 at 20:58 UTC
    No worries regarding the hash data, think I got it:

    for my $key ( keys %rules ) { print "$key => @{$rules{$key}}\n"; }

    Thanks again Monks!

    k_grdn

      Hi Monks,

      I would like to thank you for your help to develop my code:

      #!/usr/bin/perl #-------------------------------------------------------------- # Script to write iptables-save syntaxed file, add rules to # relating table files mangle, nat, filter. example table file # syntax: # INPUT DROP (Chain Policy) # -p tcp -s 192.168.0.10 -d 80.45.76.34 --dport 143 -j ACCEPT (Rule) #-------------------------------------------------------------- use strict; use warnings; use Data::Dumper; use Tie::IxHash; #-------------------------------------------------------------- # Declare Global Vars #-------------------------------------------------------------- my $filter = "filter"; my $mangle = "mangle"; my $nat = "nat"; my @tables = ($mangle, $nat, $filter); my $date = qx(date +%d%m%y%T|sed 's/\://g'); chomp $date; my $outfile = "firewall-$date"; #-------------------------------------------------------------- # Tie to keep hash order no memory optimization #-------------------------------------------------------------- tie (my %rules, 'Tie::IxHash'); #-------------------------------------------------------------- # Open each table file, match ^uppper case, split (chain policy) # , chain as hash key, push remaining lines (rules) on array ref # to key value. Print keys:policy then values, COMMIT #-------------------------------------------------------------- sub main { open IPTSAVE, ">> $outfile" or die "Failed to open $outfile : $!"; for my $file (@tables) { %rules = (); my $r = \my @uncategorised; my ($chain,$policy); print IPTSAVE "\*$file\n"; local *_; open (FILE, "<$file") or die "Failed to open $file: $!"; while(<FILE>) { chomp; next if ( /^#|^\s^/ ); if ( /^[[:upper:]]/ ) { ($chain,$policy) = split(/ /); $r = \@{$rules{$chain}}; } else { push @$r => $_; } } close FILE; for my $key ( keys %rules ) { print IPTSAVE ":$key $policy [0:0]\n"; } for my $key ( keys %rules ) { foreach(@{$rules{$key}}) { print IPTSAVE "-A $key $_\n"; } } print IPTSAVE "COMMIT\n"; } { close IPTSAVE if eof }; } #-------------------------------------------------------------- # Run Main() #-------------------------------------------------------------- main();
      Regards,

      k_grdn

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://716706]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (6)
As of 2024-03-28 19:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found