Search code examples
perlperl-data-structures

How to access elements in this data structure?


I have a variable called $ip_data and when I do 'print $ip_data;' it shows something like this: ARRAY(0x3c353cc4);

Data::Dump gives me the following structure:

[
 {
   ip => "127.0.0.1",
   list => [
     "France",
     "Safari",
   ],
 },
]

I would like to extract ip (IP address), country and browser and put it in a hash that looks like this:

%ip_info = (  ip       => '127.0.0.1',
              country  => 'France',
              browser  => 'Safari' );

So far all my attempts to dereference it have failed. As I understand it $ip_data is an array that has a hash for an element, and that hash's first element is a string, but the second is an array holding two string elements.

Am I wrong about it? If so please tell me what's going on here and how to get those elements in %ip_info.


Solution

  • $ip_data is a reference to array containing a single element (a hash reference). You can construct your hash like this:

    my %ip_info = (
        ip      => $ip_data->[0]{ip},
        country => $ip_data->[0]{list}[0],
        browser => $ip_data->[0]{list}[1],
    );
    

    I suggest you to read the perlref manual page to find out more about using references in Perl.