On 04/13/2016 08:29 PM, Kenneth Wolcott wrote:
Hi;
I have the following output from Data::Dumper and I want to extract
the first string that the "Id" name points to.
$VAR1 = [
bless( {
'Id' => [
'01tC0000003udXAIAY',
'01tC0000003udXAIAY'
],
'type' => 'Product2'
}, 'sObject' )
];
So if the data structure is contained in a Perl variable called
$data, then I think that this is a reference to a hash.
So I need to do something like "@{$data}" to get to the hash.
But I want the "Id" element of the hash so I want something like
@{$data}->{'Id'}
But that's the array, so what about ${@{$data}->{'Id'}}[0]
But that isn't right either.
I'm either getting an undefined reference to a hash error or not a
scalar reference error.
Thanks,
Ken Wolcott
First - consider if you should be walking the object implementation at
all -- In a well engineered class, the class "sObject" should include a
mechanism to get to its internal parts.
The way presented -- $VAR1 (or $data if you prefer) is actually an
arrayref with one element, the object containing a hash, with two
elements. At key 'type' is a scalar with the value 'Product2' and at
'Id' is an arrayref of two elements.
(It is possible that the in calling Data::Dumper, you inadvertently
added the outermost arrayref)
So - to get to the first object, you dereference $data->[0] (also
written less attractively as $$data[0])
my $object = $data->[0];
To get to the referent of 'Id' you would deref the object using
my $arrayref = $object->{Id} # equivalent to $$object{Id}
Then, to dereference the arrayref, you could turn it back into an array
my @id = @$arrayref;
Of course, you could do that all in one fell swoop:
my @id = @{ $data->[0]{Id} };
Or -- if you prefer the superfluous extra-dollar-sign notation
my @id = @{${$$data[0]}{Id}};
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/