Вы поместили две ссылки ha sh на @menu
. Поэтому, когда вы запускаете этот код:
print to_json({"menu", @menu});
Это так же, как если бы вы запустили:
print to_json({ "menu", \%el1, \%el2 });
Бит между { ... }
интерпретируется как ха sh, поэтому первый и третьи элементы отображаются как ключи ha sh, а второй элемент - как значения. Таким образом, вы получите результат, который вы видите. (И, как было отмечено в комментариях, вы получите предупреждение под use warnings
, поскольку у этого второго ключа нет связанного значения).
Я думаю, что вы хотели написать:
print to_json({ "menu", \@menu });
Но даже это не правильно. Вы получаете следующее:
{
"menu":[{
"element1":"hello"
},{
"element2":"world"
}]
}
Два хэша, которые вы добавили в массив, все еще совершенно разные.
Но на самом деле вам нужен только один ха sh. Так что создайте это вместо этого.
#!/usr/bin/perl
use strict;
use warnings;
use JSON;
use Data::Dumper;
my @menu;
my %el1 = (
"element1" => "hello",
"element2" => "world",
);
print to_json({"menu", \%el1});