Galet Perl-misstag

Så här brukar man skriva hashar i Perl:

my $hash = {
    key1 => 'foo',
    key2 => &bar,
    key3 => 'baz'
};

Nu är det så att man inte alltid vet hur funktionen &bar returnerar sitt data. Om man inte vet det kan det hända att ovanstående hash inte resulterar i den hash man tror att man ska få. Om &bar returnerar data med en wantarray så ska man veta att när man skriver funktionsanrop i en hash, så befinner man sig i list-context. Det betyder att man rätt som det är kan få två eller fler värden returnerade från funktionen &bar. Om man vet att skrivningen “=>” i en hash bara är syntaktiskt socker för ett komma-tecken så betyder det att något så otroligt kan hända att key3 blir ett värde till en nyckel som returneras från &bar.

Allt detta låter naturligtvis helsnurrigt, men det är sant. Man kan hamna i många timmars felsökning, men nu har jag råkat ut för det flera gånger, så jag vet vad ska ska akta mig för… Egentligen kan man tycka att det är en bugg i Perl, och att “=>” borde resultera i ett scalar context, men jag kan för lite Perl-internals för att tycka rätt saker.

 Share!