Thread übergabe eines hash an sub (6 answers)
Opened by d4mi4n at 2005-11-19 02:18

Dubu
 2005-11-19 14:27
#60251 #60251
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Erstmal vorweg: Ich stimme betterworld zu, Prototypen sollte man nur dann benutzen, wenn man auch genau weiss, wie sie funktionieren.

[quote=d4mi4n,19.11.2005, 01:18]ich habe heute versucht eine funktion zu erstellen an die ich einen hash übergebe, schreibe ich beim prototypen der funktion sub foo (%) kann ich kein $bar = &foo(%blubb); durchführen,
[/quote]
1.) Wenn du eine Funktion mit &funktionsname aufrufst, werden automatisch Prototypen ignoriert. Ich lasse das '&' grundsaetzlich weg. Andere (hallo, strat ;-)) benutzen es selektiv.

2.) Ob mit oder ohne '&', der Aufruf sollte genau so funktionieren:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

sub foo(%) {
   my %hash = @_;

   return Dumper \%hash;
}


my %bar = ( eins => 1, zwei => 2 );

my $baz = foo(%bar);
print $baz;
_ _END_ _
$VAR1 = {
         'eins' => 1,
         'zwei' => 2
       };


Quote
erst wenn ich sub foo($) schreibe und den hash mit &foo($blubb) übergebe funktioniert es,

Du uebergibst dort den Skalar $blubb und nicht den Hash %blubb. Das sind zwei ganz verschiedene Variablen ...

Quote
ich habe irgendwie verständnissprobleme mit dem kontext
als es dann endlich funktionierte habe ich das strict pragma reingeklöppelt und schon meckert er wieder rum warum ich  vor $blubb kein my stehen habe, reicht es nciht wenn vor %blubb ein my steht?

... und deshalb hat die Deklaration von %blubb nichts mit $blubb zu tun. Das meckert strict korrekt an.

View full thread übergabe eines hash an sub