Когда у вас есть ссылка на переменную вместо имени переменной, вы просто заменяете имя в синтаксисе, который вы хотите использовать, на блок, который оценивает ссылку.
Если у вас есть имя массив, вы использовали бы следующее, чтобы получить его размер:
@NAME # In scalar context
Если у вас есть ссылка на массив, вы бы использовали следующее, чтобы получить его размер:
@BLOCK # In scalar context
Итак, если $messages
содержит ссылку на массив, его размер получится следующим:
@{ $messages } # In scalar context
Вы можете опустить curlies, если они содержат простой скаляр ($NAME
).
@$messages # In scalar context
Итак,
use Cpanel::JSON::XS qw( decode_json );
my $json = do { local $/; <DATA> };
my $data = decode_json($json);
my $messages = $data->{message};
my $num_messages = @$messages; # Or: @{ $data->{message} }
__DATA__
{
"message": [
{
"abc": "",
"xyz": "",
"pqr": ""
},
{
"abc": "",
"xyz": "",
"pqr": ""
},
{
"abc": "",
"xyz": "",
"pqr": ""
},
{
"abc": "",
"xyz": "",
"pqr": ""
},
{
"abc": "",
"xyz": "",
"pqr": ""
}
]
}
См. Perl Синтаксис разыменования .