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

Dereferenzieren von hashes

Leser: 1


<< >> 8 Einträge, 1 Seite
stephanb
 2007-05-08 14:25
#76535 #76535
User since
2007-03-27
10 Artikel
BenutzerIn
[default_avatar]
Hallo,
habe ein kleines Problem beim derefernzieren von Hashes in einer subroutine.
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# filerinfohash
my %finfo;
my $hashref=\%finfo;
# füllen mit infos
&info_abfrage($filer,$hashref,@vfilerlist);
# output
&output($hashref);
##################################################################
sub info_abfrage {
my ($name,$ref,@liste)=@_;

print ("Ausgabe: Name=> $name, Liste: @liste, hashref=> *$ref* \n");
foreach my $vfilern (sort @liste)
{
 open (ABFRAGE,"befehlsliste | ") || die "cannot execute";
 while (<ABFRAGE>)
{
chomp (my $r2=$_);
my ($option,$info)=split (/=/,$r2);
if ( $info eq "" )
{ $info = "NOT SET"; }
if ($option =~ /domainname/ )
{ $$ref{$name}{$vfilern}{'dnsdomain'}="$info"; }
elsif ( $option =~ /resolvconf/ )
{ $$ref{$name}{$vfilern}{'dnsserver'}="$info"; }
elsif ( $option =~ /wins/ )
{ $$ref{$name}{$vfilern}{'winsserver'}="$info"; }
else
{ print ("Wrong option $option \n"); }
} # end while abfrage
 close (ABFRAGE);
}# end foreach
}
##################################################################
sub output {
my ($refz)=@_;
foreach my $serv (sort keys %{$refz})
{
print ("\nFiler $serv:\n");
foreach my $vfiler (sort keys %{$refz{$serv}})
{
}
}
} # end of sub


Das Problem liegt bei der ausgabe. den zweiten foreach schluckt er nicht, das derefernzieren funkt dort nicht.
renee
 2007-05-08 14:45
#76536 #76536
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was bekommst Du für eine Fehlermeldung?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
stephanb
 2007-05-08 14:55
#76537 #76537
User since
2007-03-27
10 Artikel
BenutzerIn
[default_avatar]
Hier die Fehlermeldung:
Global symbol "%refz" requires explicit package name at ./vfiler_infos_for_db.pl line 146.
Execution of ./vfiler_infos_for_db.pl aborted due to compilation errors (#1)
(F) You've said "use strict vars", which indicates that all variables
must either be lexically scoped (using "my"), declared beforehand using
"our", or explicitly qualified to say which package the global variable
is in (using "::").

Uncaught exception from user code:
Global symbol "%refz" requires explicit package name at ./vfiler_infos_for_db.pl line 146.
Execution of ./vfiler_infos_for_db.pl aborted due to compilation errors.
at ./vfiler_infos_for_db.pl line 162
stephanb
 2007-05-08 14:57
#76538 #76538
User since
2007-03-27
10 Artikel
BenutzerIn
[default_avatar]
Aber nur wenn das zweite foreach mit dabei ist (im output).
Beim ersten funktioniert es einwandfrei.
Zum hashaufbau:
hash {servername}{vsxservername}{dns...} usw.

Wobei bei servername 30 eintraege sind un dpro servername 10 vsxservernamen vorkommen koennen
renee
 2007-05-08 15:11
#76539 #76539
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach aus
Code: (dl )
$refz{$serv}
das hier:
Code: (dl )
$refz->{$serv}
(in der zweiten foreach-Schleife).

$refz ist immer noch eine Referenz, also muss sie auch so behandelt werden.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
stephanb
 2007-05-08 15:25
#76540 #76540
User since
2007-03-27
10 Artikel
BenutzerIn
[default_avatar]
Hallo,
das hab ich schonversucht, dann kommt folgende Meldung:
ype of arg 1 to keys must be hash (not hash element) at ./vfiler_infos_for_db.pl line 174, near "})
"
Execution of ./vfiler_infos_for_db.pl aborted due to compilation errors (#1)
(F) This function requires the argument in that position to be of a
certain type. Arrays must be @NAME or @{EXPR}. Hashes must be
%NAME or %{EXPR}. No implicit dereferencing is allowed--use the
{EXPR} forms as an explicit dereference. See perlref.

Uncaught exception from user code:
Type of arg 1 to keys must be hash (not hash element) at ./vfiler_infos_for_db.pl line 174, near "})
"
renee
 2007-05-08 15:29
#76541 #76541
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Sieht das so bei Dir aus
Code: (dl )
1
2
3
 foreach my $vfiler (sort keys %{$refz->{$serv}})
{
}
??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
stephanb
 2007-05-08 15:36
#76542 #76542
User since
2007-03-27
10 Artikel
BenutzerIn
[default_avatar]
Hmm, hab eine { Klammer vergessen.
:blush: Dann kann es nicht gehen.

Danke
<< >> 8 Einträge, 1 Seite



View all threads created 2007-05-08 14:25.