Wenn schon dann richtig: [...]
Nun, ich bin da ob Deiner Definition von "richtig" nicht ganz sicher. Der von Dir gepostete Code ist in sich nicht komplett, also musste ich, um es auf diese Art zu testen, noch Dein "package FreezeHash;" hinzufügen, dann konnte ich den Test starten. Da ich unter Linux kein Laufwerk "d:" habe, musste ich allerdings noch die Pfade anpassen, dann lief es durch. Allerdings wird eine Warnung ausgegeben: "(warning: too few iterations for a reliable count)". Dennoch werden Ergebnisse ausgegen, die sich aber deutlich von Deinen unterscheiden.
Erster Versuch, analog Deinem Code, ohne "%ENV":
Rate freezer json
freezer 2439/s -- -66%
json 7143/s 193% --
JSON ist hier ca. doppelt so schnell wie Deine Implementation.
Zweiter Versuch, analog Deinem Code, mit "%ENV":
Rate freezer json
freezer 1099/s -- -84%
json 6667/s 507% --
JSON ist hier ca. 5x so schnell wie Deine Implementation. Je größer die Datenstruktur, umso mehr scheint der Unterschied ins Gewicht zu fallen.
Glaube Dir allerdings, dass Deine Messung auf Deinem Testsystem so ausgefallen ist, wie Du schreibst. Deine Perl-Installation unter Deinem Windows wird für JSON vermutlich auf reinen Perl-Code zurückfallen, weil JSON:XS (das C-Kompilat) dort nicht verfügbar ist. Das könnte den Unterschied erklären.
Im Übrigen ist JSON für meine Zwecke völlig indiskutabel.
Wenn das so ist, dann ist das so! Für uns nachvollziehbar ist es allerdings nicht.