你好 Struppi,
if(!exists $hashTP{$currTP}) {
$hashTP{$currTP} = [];
}
> >
> > Hm. Mit () statt [] bekomme ich auch bei use strict und use warnings
> > keinerlei Hinweis darauf, daß da was falsch sein könnte.
Das heisst nicht, dass es nicht falsch ist ;) Sieh es dir doch mal an:
~~~perl
use strict;
use warnings;
use Data::Dumper;
my $var = {};
$var->{brackets} = ();
$var->{squarebrackets} = [];
print Dumper $var;
Du siehst, der Hash hat einen Eintrag mit dem Key „brackets“ dessen
Inhalt „undef“ ist und einen Eintrag mit dem Key „squarebrackets“,
dessen Inhalt [] ist, was eine Array-Referenz erzeugt – der Inhalt ist
also eine Array-Referenz. Das, was du eigentlich wolltest ;)
nicht falsch, […]
Doch, in diesem Falle falsch weil nicht das, was gewünscht.
[…] (ohne jetzt zu testen entweder null oder undef)
Undef ;)
Mit einer runden Klammer sollte dein Skript abbrechen, wenn du versucht
mit pop oder push darauf zu zugreifen.
Nein, da greift das automagische Type-Mangeling. Wenn du eine Variable mit
dem Wert „undef“ dereferenzierst, wird implizit eine neue Referenz
erstellt:
use strict;
use warnings;
use Data::Dumper;
my $var = {};
$var->{brackets} = ();
push @{$var->{brackets}},"abcdef";
print Dumper $var;
再见,
克里斯蒂安