Anonymous: Variablen - Unterschiede

Beitrag lesen

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.