Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^2: NEXT statement in for loop

by Anonymous Monk
on Jun 05, 2016 at 16:49 UTC ( [id://1164937]=note: print w/replies, xml ) Need Help??


in reply to Re: NEXT statement in for loop
in thread NEXT statement in for loop

pasting the code again

my @routers =$r[0]; my @router = ( "R0", "R2", "R3" ); my %fpc = ( R0 => { fpc1 => 5, fpc2 => 4, }, R2 => { fpc1 => 3, fpc2 => 2, }, R3 => { fpc1 => 1, fpc2 => 0, }, ); my %pic = ( R0 => { pic1 => 5, pic2 => 4, }, R2 => { pic1 => 3, pic2 => 2, }, R3 => { pic1 => 1, pic2 => 0, }, ); @router = ( "R0", "R2", "R3" ); for my $rh (@routers) { my $r = shift(@router); print "value of r is $r\n"; OUTER: for my $f (values %{ $fpc{$r} }) { INNER: for my $p (values %{ $pic{$r} }) { print "request chassis pic offline fpc-slot $f pic-slot $p +\n"; next OUTER; } } }

Yes, values in hash are not ordered as expected

Replies are listed 'Best First'.
Re^3: NEXT statement in for loop
by Corion (Patriarch) on Jun 05, 2016 at 17:30 UTC

    I'm not clear whether your question has been answered yet. To further clarify your code, I've reindented it and added some more diagnostics that show the order that values will take for a given hash:

    #!perl -w use strict; use Data::Dumper; my @r = ('R0'); my @routers =$r[0]; my @router = ( "R0", "R2", "R3" ); my %fpc = ( R0 => { fpc1 => 5, fpc2 => 4, }, R2 => { fpc1 => 3, fpc2 => 2, }, R3 => { fpc1 => 1, fpc2 => 0, }, ); my %pic = ( R0 => { pic1 => 5, pic2 => 4, }, R2 => { pic1 => 3, pic2 => 2, }, R3 => { pic1 => 1, pic2 => 0, }, ); @router = ( "R0", "R2", "R3" ); for my $rh (@routers) { my $r = shift(@router); print "value of r is $r\n"; print "Processing routers in order " . join(",", values %{ $fp +c{$r} }), "\n"; OUTER: for my $f (values %{ $fpc{$r} }) { print "Processing pic-elements for $r in order " . join( " +,", values %{ $pic{$r} }), "\n"; INNER: for my $p (values %{ $pic{$r} }) { print "request chassis pic offline fpc-slot $f pic-slo +t $p\n"; next OUTER; } } }

    Note that between runs of the program, the order can change for every hash. The best way to work with this is to save the order you want in a separate list:

    c:\Users\Corion\Projekte>perl -w tmp.pl value of r is R0 Processing routers in order 5,4 Processing pic-elements for R0 in order 5,4 request chassis pic offline fpc-slot 5 pic-slot 5 Processing pic-elements for R0 in order 5,4 request chassis pic offline fpc-slot 4 pic-slot 5 c:\Users\Corion\Projekte>perl -w tmp.pl value of r is R0 Processing routers in order 5,4 Processing pic-elements for R0 in order 4,5 request chassis pic offline fpc-slot 5 pic-slot 4 Processing pic-elements for R0 in order 4,5 request chassis pic offline fpc-slot 4 pic-slot 4 c:\Users\Corion\Projekte>perl -w tmp.pl value of r is R0 Processing routers in order 5,4 Processing pic-elements for R0 in order 4,5 request chassis pic offline fpc-slot 5 pic-slot 4 Processing pic-elements for R0 in order 4,5 request chassis pic offline fpc-slot 4 pic-slot 4 c:\Users\Corion\Projekte>perl -w tmp.pl value of r is R0 Processing routers in order 5,4 Processing pic-elements for R0 in order 5,4 request chassis pic offline fpc-slot 5 pic-slot 5 Processing pic-elements for R0 in order 5,4 request chassis pic offline fpc-slot 4 pic-slot 5

    In your case, I would save the list of numbers like the following:

    my @items = values ${ $fpc{$r} }; for my $f (@values) { ... }
Re^3: NEXT statement in for loop
by poj (Abbot) on Jun 05, 2016 at 17:55 UTC

    If the order of the values is important and the keys not then maybe use a hash of arrays (HoA)

    #!perl use strict; my @routers = ( "R0", "R2", "R3" ); my %fpc = ( R0 => [5,4], R2 => [3,2], R3 => [1,0], ); my %pic = ( R0 => [5,4], R2 => [3,2], R3 => [1,0], ); for my $r (@routers) { print "value of r is $r\n"; for my $f (@{ $fpc{$r} }) { for my $p (@{ $pic{$r} }) { print "request chassis pic offline fpc-slot $f pic-slot $p\n"; } } }
    poj

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (6)
As of 2024-04-19 13:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found