my $c1 = {};
Anonyme Hash-Referenz.
aber
$c1 = {};
ist doch das Gleiche wie
$c1;denn in beiden Fällen funktioniert
$c1->{Begruessung} = "Hallo Anonymous!";
print "$c1->{Begruessung}\n";
Das ist ein Trugschluss. Die zweite Variante funktioniert, weil der ->-Operator automatisch eine anonyme Hash-Referenz anlegt. Aber probiere es ruhig aus:
perl -MData::Dumper -Mstrict -e 'my $c1; my $c2 = {}; print Dumper $c1; print Dumper $c2;'
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.
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.