User since
2007-03-27
10
Artikel
BenutzerIn
Hallo,
habe ein kleines Problem beim derefernzieren von Hashes in einer subroutine.
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.
User since
2003-08-04
14371
Artikel
ModeratorIn
Was bekommst Du für eine Fehlermeldung?
User since
2007-03-27
10
Artikel
BenutzerIn
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
User since
2007-03-27
10
Artikel
BenutzerIn
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
User since
2003-08-04
14371
Artikel
ModeratorIn
Mach aus
das hier:
(in der zweiten foreach-Schleife).
$refz ist immer noch eine Referenz, also muss sie auch so behandelt werden.
User since
2007-03-27
10
Artikel
BenutzerIn
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 "})
"
User since
2007-03-27
10
Artikel
BenutzerIn
Hmm, hab eine { Klammer vergessen.
:blush: Dann kann es nicht gehen.
Danke