use 5.010;
use strict;
use warnings;
use JSON::XS;
use YAML::XS;
my %data = ();
my $content = <<HERE;
{
"name":"BLAHBLAH","contact":{"phone":"12345","twitter":"BLAHBLAH"},
"location": {"address":"NOTTELLING","lat":10,"lng":10,"postalCode":"1234",
"city":"BLAH","state":"BLAH","country":"BLAH"},
"categories":[{"id":"BLAH","name":"BLAH"}]
}
HERE
my $id = "name1";
sub function {
my ( $id, $data, $content ) = @_;
my %data = %$data;
my $out = decode_json($content);
say "out:", Dump $out;
$data{$id} = $out;
}
function( $id, \%data, $content );
say "data:", Dump %data;
This doesn’t work as the way I expected. Can you please tell me why and how it will work?
The reason that you’re not finding anything in the package-scoped
%data(the one defined just afteruse YAML::XS) is because you’re creating a brand-new and completely independent%datainside offunctionwith the lineThis creates a new hash and copies the contents of the hash referenced by
$datainto it.Try this instead: