Here is the situation I am facing...
$perl_scalar = decode_json( encode (\'utf8\',$line));
decode_json returns a reference. I am sure this is a
$num_of_hashes = @{$perl_scalar};
Since you're assigning to a scalar, the dereferenced array is evaluated in a scalar context to the number of elements.
If you need to force scalar context then do as KARASZI says and use the scalar
function.
You can see the entire structure with Data::Dumper:
use Data::Dumper;
print Dumper $perl_scalar;
Data::Dumper is a standard module that is installed with Perl. For a complete list of all the standard pragmatics and modules, see perldoc perlmodlib
.
That would be:
scalar(@{$perl_scalar});
You can get more information from perlreftut.
You can copy your referenced array to a normal one like this:
my @array = @{$perl_scalar};
But before that you should check whether the $perl_scalar
is really referencing an array, with ref:
if (ref($perl_scalar) eq "ARRAY") {
my @array = @{$perl_scalar};
# ...
}
Update
The length method cannot be used to calculate length of arrays, it's for getting the length of the strings.
You can also use the last index of the array to calculate the number of elements in the array.
my $length = $#{$perl_scalar} + 1;