Patrick Andrieu: Parameterübergabe (Hash und Skalar)

Beitrag lesen

Hallo Gernot!

Ergänzend zu Struppis Posting...

Hättest Du Dir die Warnungen ausgeben lassen, wäre das, was Dir Struppi eben geantwortet hat, vielleicht vorher klar gewesen. Nehmen wir also Dein Beispiel:

  
  
C:\>perl -w  
#        ^^ Gibt Warnungen aus.  
use strict;  
  
my %hashtab = ( 1 => "Sponge Bob",  
                2 => "Patrick Star");  
my $par = "Meerjungfraumann";  
  
  
print "HASHTAB: ", %hashtab;  
print $/;  
  
subr(%hashtab, $par);  
  
sub subr {  
  my (%tab, $p) = @_;  
  print "HASH: ", %tab;  
  print $/, "PAR: $p";  
}

Ausgabe:
---------------------------------------------------------
HASHTAB: 1Sponge Bob2Patrick Star
Odd number of elements in hash assignment at - line 15.
Use of uninitialized value in print at - line 16.
Use of uninitialized value in concatenation (.) or string at - line 17.
HASH: 1Sponge BobMeerjungfraumann2Patrick Star
PAR:
---------------------------------------------------------

»Odd number of elements in hash assignment at - line 14.«... aha!

Übergibst Du stattdessen eine Referenz:

  
  
C:\>perl -w  
use strict;  
  
my %hashtab = ( 1 => "Sponge Bob",  
                2 => "Patrick Star");  
my $par = "Meerjungfraumann";  
  
$, = $/;  
print "HASHTAB: ", %hashtab;  
print $/;  
  
subr(\%hashtab, $par);  
  
sub subr {  
  my $tab = shift;  
  my $p = shift;  
  my %tab = %$tab;  
  $, = $/;  
  print "HASH: ", %tab;  
  print $/, "PAR: $p";  
}

Ausgabe:
---------------------------------------------------------
HASHTAB:
1
Sponge Bob
2
Patrick Star
HASH:
1
Sponge Bob
2
Patrick Star

PAR: Meerjungfraumann
---------------------------------------------------------

Viele Grüße aus Frankfurt/Main,
Patrick

--

_ - jenseits vom delirium - _
[link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
Nichts ist unmöglich? Doch!
Heute schon gegökt?