27

Here is the situation I am facing...

$perl_scalar = decode_json( encode ('utf8',$line));

decode_json returns a reference. I am sure this is an array. How do I find the size of $perl_scalar?? As per Perl documentation, arrays are referenced using @name. Is there a workaround?

This reference consist of an array of hashes. I would like to get the number of hashes.

If I do length($perl_scalar), I get some number which does not match the number of elements in array.

1

4 Answers 4

44

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};
  # ...
}

The length method cannot be used to calculate length of arrays. It's for getting the length of the strings.

Sign up to request clarification or add additional context in comments.

Comments

5

You can also use the last index of the array to calculate the number of elements in the array.

my $length = $#{$perl_scalar} + 1;

Comments

5
$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.

Comments

2

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.