Leser: 37
1 2 3 4 5 6 7 8 9 10 11 12 13
#!/usr/bin/perl -W use strict; use warnings; my %hash; $hash{test}{1} = 'test1'; $hash{test}{1}{test2} = 'test3'; $hash{test}{2} = 'test5'; foreach my $nr ( grep {exists $hash{test}{$_}{test2}} keys %{$hash{test}} ) { print $nr; }
QuoteCan't use string ("test1") as a HASH ref while "strict refs" in use at test14.pl line 6.
1 2 3 4 5 6 7 8 9 10 11 12 13
#!/usr/bin/perl -W use strict; use warnings; my %hash; $hash{test}{1}{test2} = 'test3'; $hash{test}{1} = 'test1'; $hash{test}{2} = 'test5'; foreach my $nr ( grep {exists $hash{test}{$_}{test2}} keys %{$hash{test}} ) { print $nr; }
QuoteCan't use string ("test1") as a HASH ref while "strict refs" in use at test14.pl line 8.
1 2 3
use Scalar::Util qw(reftype); my $reftype = reftype $hash{test}{1}; defined $reftype and $reftype eq "HASH" ? ...
if ref($hash{test}->{$_}) eq 'HASH'
1 2 3 4 5 6 7 8
grep {exists $hash{test}{$_}{test2}} keys %{$hash{test}} # vs. grep { exists $hash{test}->{$_}->{test2} } keys %{ $hash{test} }
1 2 3 4 5
for my $nr (keys %{$hash{test}}) { if (exists $hash{test}{$_}{test2}) print $nr; } }
1 2 3 4 5 6 7
my $reftype=ref $hash{test}{1}; if($reftype eq "HASH"){ ... } elsif($reftype eq ''){ ... }
Guest wer"ref" kann zurückgeben: "SCALAR" "CODE" "ARRAY" "HASH" oder den Klassen(Paket)-Namen eines Objektes.
print ref \\$foo
2010-05-02T13:11:09 biancaUnter anderem die Tatsache, dass Data::Dumper das auch nicht korrekt anzeigt
2010-05-02T13:43:33 pqwenn Data::Dumper einen bug hat, wäre es nett, wenn du den reporten würdest.
1 2 3 4 5 6 7 8
#!/usr/bin/perl -W use strict; use warnings; use Data::Dumper; my %hash; $hash{1}{2}{3} = '1/2/3'; $hash{1}{2} = '1/2'; print Dumper (\%hash);
2010-05-02T13:49:39 biancaNach meiner Meinung fehlt die Anzeige von $hash{1}{2}{3}.
Bug oder falsche Modulnutzung?
1 2 3 4 5 6 7 8 9 10
#!/usr/bin/perl -W use strict; no strict 'refs'; use warnings; use Data::Dumper; my %hash; $hash{1}{2} = '1/2'; $hash{1}{2}{3} = '1/2/3'; print Dumper (\%hash); print "existiert!" if defined $hash{1}{2}{3};
2010-05-02T14:01:45 biancaErwarten würde ich ungefähr soetwas:
2010-05-02T14:05:04 pqdas was du da von Data::Dumper als ausgabe erwartest, kann in perl so nicht als datenstruktur existieren.
2010-05-02T14:11:04 biancaWieso funktioniert dann am Ende das if statement doch?
Ersetze letzte Zeile durch print "existiert mit Wert >$hash{1}{2}{3}<!" if defined $hash{1}{2}{3}; um zu beweisen, dass es existieren kann.
Warum behauptest Du, dass es nicht existieren kann?
QuoteSieht es bei Dir anders aus?
2010-05-02T14:13:30 pqdu denkst, du bekommst einen wert aus %hash. stattdessen geht perl dank no strict refs auf die symboltabelle
2010-05-02T14:17:40 biancaOK, dann wäre das in meinen Augen als unangenehme und für mich derzeit sinnlos erscheinende Eigenart von Perl geklärt.
2010-05-02T14:20:50 pqsinnlos? symboltabellen manipulieren möchte ich nicht missen, um dynamisch subs anzulegen. man muss halt nur wissen, was man tut.
1 2 3 4 5 6 7 8 9 10
my %dispatch = ( blubb => \&sub1, foo => \&sub2, bar => \&sub3, ); sub sub1 { ... } ... my $sub = "foo"; $dispatch{ $sub }->($parameter); # ruft sub2($parameter) auf
1 2 3 4
my $coderef = Modul::Name->can("subname"); my $coderef = main->can("subname"); $coderef->($parameter);
1 2 3 4 5 6 7 8 9 10
my %dispatch = ( blubb => \&sub1, foo => \&sub2, bar => \&sub3, ); sub sub1 { ... } ... my $sub = "foo"; $dispatch{ $sub }->($parameter); # ruft sub2($parameter) auf
2010-05-09T14:26:49 biancaDispatch-Tabelle sähe wie aus?
2010-05-02T14:11:04 biancaWarum behauptest Du, dass es nicht existieren kann?
2010-05-02T14:27:57 pqvielleicht sollte ich einfach keine behauptungen mehr aufstellen.
2010-05-02T14:01:45 biancaUnd was ist hiermit?
Code (perl): (dl )1 2 3$hash{1}{2} = '1/2'; $hash{1}{2}{3} = '1/2/3'; print "existiert!" if defined $hash{1}{2}{3};
2010-05-02T14:11:06 pqdenn der zugriff auf $hash{1}{2}{3} ist dank no strict refs nichts anderes als der zugriff auf die symbolische referenz/hashref mit dem namen "1/2".
2010-05-02T14:15:10 biancaAber wenn ich im Code solch eine Struktur definiere (was mir strict mittels option anscheinend durchgehen lässt)
Quoteund sie auch durchgängig überall funktioniert, warum unterschlägt Data::Dumper den vorhanden Wert stillschweigend?
2010-05-02T14:17:37 pqso, jetzt hab ich mich hoffentlich das letzte mal wiederholt.
2010-05-02T14:22:10 biancaB.t.w. Mal davon gehört oder gelesen, dass das Verständnis eines Empfängers durch identische Wiederholungen nicht besser wird?
2010-05-02T14:22:10 biancaB.t.w. Mal davon gehört oder gelesen, dass das Verständnis eines Empfängers durch identische Wiederholungen nicht besser wird?
2010-05-02T13:49:39 biancaNach meiner Meinung fehlt die Anzeige von $hash{1}{2}{3}.
2010-05-02T14:17:40 biancaAber warum unterschlägt mir Data::Dumper - unabhängig von der Darstellungsform - meinen Wert '1/2/3' komplett?
2010-05-02T14:15:10 biancawarum unterschlägt Data::Dumper den vorhanden Wert stillschweigend?