HoH - ich steh auf der Leitung

HoH - ich steh auf der Leitung

am 18.11.2006 22:15:17 von Helmut Wollmersdorfer

Folgender Code funktioniert nicht:

my @dbs = ();
my %entries = ();
foreach my $entry (@$eref) {
my ($db, $definition) = @$entry;
chomp $definition; # remove trailing \n
my ($key,$def) = split /\s*\n\s*/, $definition, 2;
$key_print = $key;
if ($last_db ne $db) {
push (@dbs, $db); # remember sort order of $db
}
add_entry (\%entries,$db,$def,'');
$last_db = $db;
}

foreach my $db (@dbs) {
my $hash_ref = \%entries;
my $def_ref = ${$hash_ref}{$db}; # FUNKTIONIERT NICHT
print "
db = $db key_ref = $def_ref ";
foreach my $def (sort keys %{$def_ref}) {
print "
db = $db def = $def";
}
}
print_keys (\%entries); # for Test only

sub add_entry {
my ($hashref,$db,$key,$value) = @_;
if ( exists ${$hash_ref}{$db} ) {
my $key_ref = ${$hash_ref}{$db};
${$key_ref}{$key} = $value;
}
else {
${$hash_ref}{$db} = { $key => $value };
}
}

sub print_keys {
my ($hashref) = @_;
foreach my $db (sort keys %{$hash_ref}) {
my $key_ref = ${$hash_ref}{$db}; # FUNKTIONIERT
foreach my $def (sort keys %{$key_ref}) {
print "
$db $def";
}
}
}

Die Ausgabe schaut dann (ohne HTML) so aus:

db = lasub key_ref =
[...]
lasub Viola adunca
lasub Viola affinis
lasub Viola agellae
[...]

Rätselhaft?

Helmut Wollmersdorfer

Re: HoH - ich steh auf der Leitung

am 19.11.2006 00:30:11 von Bjoern Hoehrmann

* Helmut Wollmersdorfer wrote in de.comp.lang.perl.misc:
> my $def_ref = ${$hash_ref}{$db}; # FUNKTIONIERT NICHT

Suchst du

my $def_ref = $hash_ref->{$db};

?
--
Björn Höhrmann · mailto:bjoern@hoehrmann.de · http://bjoern.hoehrmann.de
Weinh. Str. 22 · Telefon: +49(0)621/4309674 · http://www.bjoernsworld.de
68309 Mannheim · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/

use strict! (was: HoH - ich steh auf der Leitung)

am 19.11.2006 10:12:12 von Helmut Wollmersdorfer

Helmut Wollmersdorfer wrote:

> foreach my $db (@dbs) {
> my $hash_ref = \%entries;
^^^^^^^^^
[...]

> sub add_entry {
> my ($hashref,$db,$key,$value) = @_;
^^^^^^^^
> if ( exists ${$hash_ref}{$db} ) {
^^^^^^^^^^
Hätte ich gleich

use strict;

verwendet, wäre es mir schneller aufgefallen.

Helmut Wollmersdorfer