Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12009[/thread]

OO - kann Hash nicht speichern

Tags: Ähnliche Threads

Leser: 2


<< >> 6 Einträge, 1 Seite
roooot
 2008-06-13 19:50
#111013 #111013
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Hallo.

Ich versuche einen Hash an eine Klasse zu übergeben.

Das mache ich wie folgt:
Code: (dl )
1
2
3
4
5
6
7
my $query = new CGI;

use Gallery::Action;

my $action = new Gallery::Action({
parameters => _create_parameter_hash($query->url_param)
})->execute();


_create_parameter_hash
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
my %known_parameter = (
p => 'Modul', # core parameter - modul to execute
out => 'OutputType', # output type (default html)
admin => 'AdminForced', # executing call only if user is admin
);

sub _create_parameter_hash {

my @params = @_;
my %hash_to_return;

for my $param (@params) {
my $hash_index =
exists $known_parameter{lc $param} ? $known_parameter{lc $param}
: $param
;

$hash_to_return{$hash_index} = $query->url_param($param);
}

return %hash_to_return;

}



und hier wirds dann zugewiesen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sub new {

my ($class, $arg_ref) = @_;

my $new_object = bless anon_scalar(), $class;

$random_number_of{ident $new_object} = int(rand(10000));

### insert known parameters
$known_parameters_of{ident $new_object} = $arg_ref->{parameters}; #####


return $new_object;

}


und ich versuche dann so zuzugreifen:
Code: (dl )
$known_parameters_of{ident $self}{'Modul'}


Kann mir jemand helfen? Also es kommen definitiv p und out als Parameter an und haben auch Werte!

Danke
Viele Grüße :)
#Kein Kommentar
 2008-06-13 20:24
#111015 #111015
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
_create_parameter_hash sollte am besten eine hashreferenz zurückgeben
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
Linuxer
 2008-06-13 20:25
#111016 #111016
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Du beschreibst zwar, was Du tust, aber nicht, was für ein Fehlerbild du hast.

Code: (dl )
1
2
3
my $action = new Gallery::Action({
parameters => _create_parameter_hash($query->url_param)
})->execute();


Deine Routine _create_parameter_hash liefert eine flache Liste zurück,
die Du so nicht als Value nutzen kannst.
Ich vermute, dass Du da Dein Problem hast.

Liefer aus der Routine eine Hash-Referenz zurück und arbeite mit dieser Referenz.

http://perldoc.perl.org/perlreftut.html
http://perldoc.perl.org/perlsub.html
http://perldoc.perl.org/perldsc.html
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!
roooot
 2008-06-13 21:13
#111017 #111017
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Oh man, hätte ich doch nur mal schnell ins PBP geschaut, da sagt ers ja tausendmal..

Danke euch.


Kleine Nebenfrage: Ist es besser den Hashname in ' zuschreiben?
$hash{foo} oder $hash{'foo'}? Was besser? Ich tendiere zu zweiterem, da dort ersichtlicher wird, dass foo ein String ist.
Viele Grüße :)
Linuxer
 2008-06-13 21:25
#111018 #111018
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Wenn Du zu zweiterem tendierst, tu das. Es schadet nicht und ein "besser" fiele mir grad nicht ein.

Stilistisch "schön" ist es, wenn Du einer Linie treu bleibst; also entweder alle Keys in ' zu packen, oder keinen. Ausnahmen gibt es immer; aber spätestens wenn die Ausnahmen die Regel werden, sollte man sich sein Konzept überlegen...
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!
Gast Gast
 2008-06-13 23:44
#111022 #111022
wenn du einen Schüssel wie "Text, mit Komma" oder '$var%hash' hast dann sind Einfache oder doppelte Anfürungszeichen sinnvoll, ansonsten kann man sie getrost weg lassen.
<< >> 6 Einträge, 1 Seite



View all threads created 2008-06-13 19:50.