Parse perl array

2019-03-05 05:27发布

问题:

I'm not familiar with perl and am trying to edit an irssi translation script. The result from a web request returns as:

$result = {
 "data" => {
  "translations" => [
   {
    "translatedText" => "Halloween"
   }
  ]
 }
}

How can I fetch only the translatedText portion, so that

$string = 'Halloween'

Thanks.

回答1:

"Halloween" could be obtained as:

$result->{"data"}->{"translations"}->[0]->{"translatedText"}

The arrows after the first one can be omitted, so an even shorter variant would be:

$result->{"data"}{"translations"}[0]{"translatedText"}

Basically you have multiple indirections at different levels:

  • reference to a hash
  • its "data" key being a reference to another hash
  • the "translations" key of the last hash being a reference to an array
  • the first element of that array is a reference to a hash
  • the "translatedText" key of that hash is a string


回答2:

That would be

$result->{data}->{translations}->[0]->{translatedText};

$result is a hash ref. The key 'data' points at yet another hash ref, which has a key 'translations' pointing at an array ref. The first and only element in that array ref has a key 'translatedText' which points at the data of interest: 'Halloween'.