Thread Hash als Schleifenbedingung in Schleife ändern
(4 answers)
Opened by bianca at 2010-08-10 20:00
Du erstellst die Liste der Schlüssel (einmalig!) und iterierst über diese. Das Ändern von $nr hat keine weitere Bedeutung, man kann nicht "zurückspringen" und selbst wenn man es könnte, würde man ständig wieder in den Abzweig $i == 3 geraten. Da %hash nun aber keinen Wert mehr hinter dem Schlüssel "5" gespeichert hat, bekommst du die 'uninitialized...' Meldung.
Ich frage mich erneut weshalb du keinen Array verwendest? Wie auch immer, spontan fällt mir ein Flag und eine while-Schleife ein, um das gewünschte Verhalten zu erzielen, aber es gibt garantiert wesentlich schönere Möglichkeiten ;-) Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #!/usr/bin/perl use strict; use warnings; my %hash = ( 0=>'nul', 1=>'foo', 2=>'bar', 3=>'max', 4=>'mor', 5=>'zig', ); my @keys = sort {$a <=> $b} grep {$_ > 1} keys %hash; my $i = 0; my $flag = 1; # damit der Abzweig nur einmal betreten wird while ( $i < @keys ) { if ( $flag && $keys[$i] == 3 ) { $flag = 0; %hash = ( 0=>'nul', 1=>'foo', 2=>'bar', 3=>'mor', 4=>'zig', ); @keys = sort { $a <=> $b } grep { $_ > 1 } keys %hash; $i--; next; } # if print "$keys[$i] => $hash{$keys[$i]}\n"; } continue { $i++ } MfG perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
|