Sascha: Variablen - Unterschiede

Beitrag lesen

Hallo,

Das ist ein Trugschluss. Die zweite Variante funktioniert, weil der ->-Operator automatisch eine anonyme Hash-Referenz anlegt. Aber probiere es ruhig aus:

ok

perl -MData::Dumper -Mstrict -e 'my $c1; my $c2 = {}; print Dumper $c1; print Dumper $c2;'

syntax error at ./hash.pl line 14, near "Mstrict -e "
Execution of ./hash.pl aborted due to compilation errors.

und warum funktioniert

print "$c1{Begruessung}\n";

nicht?

Weil sich das auf den Hash %c1 bezieht, der zwar in diesem Fall indirekt angelegt wird, aber der keinen Key "Begruessung" hat.

damit ich das richtig verstehe... %c1; ist ein gewöhnlicher hash und $c1={}; ist eine referenz auf eine anonyme hash tabelle?

was wäre dann für die folgende Struktur geeigneter?

Dateiinhalt:
begr=hallo
name=anonymous

while(<DATEI>) {
   ($a,$b)=split /=/,$_;
   $hs->{$a}=$b;   # diese Variante
   $hs{$a}=$b;     # oder diese
}

my $c3 = ();

Undefinierter Wert (du expandierst durch diese Zuweisung eine leere Liste zu einem String, das gibt undef).

aber dies ist doch auch wieder das Gleiche wie
   $c3;

Das gleiche schon, aber nicht dasselbe.

denn der Skalar ist zunächst undefiniert. Warum setzt man dann $c3=(); ?

Tut man nicht, höchstens um Leute absichtlich zu verwirren.