Das Problem ist, dass Perl nicht weit genug vorausschaut, um herauszufinden, ob {
bedeutet "starten Sie eine anonyme Hasenreferenz" oder "starten Sie einen Codeblock". Es sollte (idealerweise) zum entsprechenden }
schauen und sehen, ob ein Komma vorhanden ist oder nicht, und entsprechend handeln, tut es aber nicht. Es schaut nur ein wenig voraus und versucht zu raten. Und dieses Mal liegt es falsch, und Sie erhalten einen Syntaxfehler über ein Komma, das dort nicht sein sollte, außer dass es das schon sollte, also bewegen Sie es nicht.
perldoc -f map
wird Ihnen alles darüber sagen. Grundsätzlich besagt es, dass wenn Sie +{
schreiben, wird Perl verstehen, dass dies "kein Codeblock" bedeutet und vermuten, dass es sich um eine Hasenreferenz handelt. Das ist wahrscheinlich die Ursache für Ihren Syntaxfehler. Als weiterer Vorschlag könnte es funktionieren zu sagen map({ HASH STUFF }, $rs->all)
- Ich wette, dass Perl hier nicht erraten wird, dass es sich um eine Code-Referenz handelt.
Ich konnte es nicht zum Laufen bringen, aber ohne $rs
oder ein ->TO_JSON
oder eine Variable namens $q
konnte ich sowieso nichts davon zum Laufen bringen. Ich hoffe, das hilft. Wenn nicht, posten Sie ein wenig mehr Code. Keine Sorge, wir beißen nicht.
Und übrigens, während wir schon dabei sind, warum nicht auf diese Weise schreiben:
my $ergebnisse;
$ergebnisse->{daten} = [ map MAGIC MAP STUFF, $rs->all ];
Könnte argumentiert werden, dass es leserlicher ist, besonders wenn Sie viele Dinge auf einmal zu $ergebnisse
hinzufügen.