Schrift
[thread]7399[/thread]

arrays erzeugen, mit namen aus anderem array (Seite 2)

Leser: 2


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Gast Gast
 2005-10-28 17:04
#59335 #59335
[quote=landogar,28.10.2005, 14:26]vereinfacht:[/quote]
Vereinfachte Darstellungen sind beim Problemsuchen übrigens äußerst unpraktisch, sofern es sich nicht um kürzere Rekonstruktionen des Problems handelt.
Dubu
 2005-10-28 18:34
#59336 #59336
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=landogar,28.10.2005, 14:26]ich hab jetzt ein zweidimensionales hash{1.dim}{2.dim}

ich befülle dieses jetzt mit werten:
vereinfacht:
hash{1.dim}{2.dim1}="wert";
hash{1.dim}{2.dim2}="wert";
hash{1.dim}{2.dim3}="wert";
hash{1.dim}{2.dim4}="wert";

wenn ich jetzt einen wert in der 1.dimension hinzufügen will
hash{1.dim}="wert";
kommt mit use strict folgende fehlermeldung:
Can't use string ("1") as a HASH ref while "strict refs" in use at...

warum kann ich in der ersten ebene keinen wert mehr hinzufügen??[/quote]
Ich nehme mal an, dass du versuchst, einen Wert in der zweiten Ebene hinzuzufuegen, nachdem du einen Wert in der ersten Ebene skalar gesetzt hast.

Also sowas:
Code: (dl )
1
2
3
4
5
use strict;
use warnings;
my %hash;
$hash{foo} = 42;
$hash{foo}{bar} = 23;

Die letzte Zeile gibt einen Fehler "Can't use string ("42") as a HASH ref while "strict refs" in use ...". Warum? Weil ein $hash{foo}{bar} verlangt, dass $hash{foo} eine Hashreferenz ist! $hash{foo} kann aber nur eines von beidem sein: entweder ein Skalar (42) oder eine Hashreferenz ({ bar => 23 }).

Wenn man aber selber schon $hash{foo} mit 42 gefuellt hat, dann versucht Perl so etwas wie 42->{bar} = 23 zu interpretieren, und das geht schief.

Wenn man die letzte Zeile vor der vorletzten ausfuehrt, gibt es keine Fehlermeldung, weil Perl so schlau ist, automatisch in  $hash{foo} eine Referenz auf { bar => 23 } anzulegen (Das nennt sich "autovivification").

Anschliessend wuerde durch das $hash{foo} = 42; diese Referenz einfach wieder geloescht und das { bar => 23 } verloren gehen.

Merke: Ein Hash kann fuer einen Schluessel immer nur einen Wert haben - entweder einen Skalar oder eine Referenz.*


PS: Dein Beispiel mit diesem "1.dim" war uebrigens ein schlechtes, weil "1.dim" kein gueltiges Bareword ist und damit als Schluessel in einem Hash in Anfuehrungszeichen stehen muesste.

* Ja, okay, oder ein Filehandle, einen Typeglob, ein Format ...
Gast Gast
 2005-10-28 19:45
#59337 #59337
@Fussnote: Ich würde mich eher fragen Skalar oder Referenz?
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2005-10-26 10:50.