Thread Hash in Subroutinen (12 answers)
Opened by Andi123 at 2017-03-30 18:58

Linuxer
 2017-03-30 19:57
#186295 #186295
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Zweite Antwort mit mehr Bezug auf Deinen Beitrag:

Guest Andi123
Ich möchte u.a. einen Hash an ein Sub übergeben. In der Sub will ich den Inhalt von %content nur lesen, nicht ändern.

$returnValue = doSub($key, \%content);

Weder mit

Code (perl): (dl )
1
2
3
4
5
sub doSub {
        my $key = shift;
        my %content = shift;
        ...
}


noch mit

Code (perl): (dl )
1
2
3
4
sub doSub {
        my ($key, %content) = @_;
        ...
}


komme ich an %content ran.


Du übergibst ja auch nur eine Referenz auf den Hash. Anscheinend hast Du auch keine Warnungen use warnings; eingeschaltet. Denn mit Warnungen solltest Du eine entsprechende erhalten, dass die Hash-Zuweisung eine ungerade Anzahl an Elementen enthält.
Perldoc:perlfunc shift holt nur ein Element ab, in diesem Fall die Referenz auf den Hash.
Beim zweiten Versuch wird die gesamte Liste der Argumente übergeben; da aber nur zwei da sind, landet im Hash wieder nur ein Element, die Referenz auf den originalen Hash.

Also entweder:
Code (perl): (dl )
1
2
3
4
5
6
sub foo {
  my $key = shift;
  my $hashref = shift;

  # und dann die Hash-Referenz derefenzieren
}


oder
Code (perl): (dl )
1
2
3
4
5
6
sub foo {
  my $key = shift;
  my %hash = @_;

  # und dann normal mit %hash als Hash arbeiten
}

benutzen.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Hash in Subroutinen