Thread Korrekter Code?
(7 answers)
Opened by bianca at 2011-04-09 20:28
hi,
ein Hash lebt solange, wie es Referenzen darauf gibt. Sofern Deine sub den Hash verändern soll, bietet es sich an, eine Referenz zu übergeben: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 my %h = ( 1 => 'foo', 2 => 'bar', ); f(\%h); sub f{ my $ref = shift; $ref->{1} = 'otto'; return 'egal'; } print $h{1}; # otto Der Hash lebt bis zum Ende der main(), daran ändert auch ein undef $ref innerhalb der sub f{} nichts. Erst wenn Du in der main() ein Code (perl): (dl
)
undef %h; notierst, ist der Hash vor dem Ende der main() tot. Übergibst Du hingegen den Hash selbst an die sub, hast Du in der sub eine Kopie davon. Es kann von Vorteil sein, einen hash zu übergeben, insbesondere dann, wenn Keys vorbelegt werden sollen mit Default-Werten: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 fx(%ENV); sub fx{ my %args = ( foo => 1, bar => 2, baz => 'default', @_ ); print $args{foo}; # 1 } %ENV wird hierbei nicht verändert. --Rolf |