http://www.perlmonks.org?node_id=1209150


in reply to search and return values from an array

Hello Gtforce,

You can use something like that:

#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use feature 'say'; my @array = ("a1 b1", "a2 b2", "a3 b3", "a5 b5", "a4 b4"); my %hash; foreach my $element (@array) { my ($key, $value) = split(/ /, $element, 2); $hash{$key} = $value; } print Dumper \%hash; say $hash{'a5'}; __END__ $ perl test.pl $VAR1 = { 'a3' => 'b3', 'a5' => 'b5', 'a4' => 'b4', 'a2' => 'b2', 'a1' => 'b1' }; b5

What I did above is split each array element based on space between strings. Then simply I used the first element as a key to the hash and the second as the value.

Update: If you prefer one liner:

my %hash = map { split( / /, $_, 2 ) } @array;

Hope this helps, BR.

Seeking for Perl wisdom...on the process of learning...not there...yet!

Replies are listed 'Best First'.
Re^2: search and return values from an array
by Gtforce (Sexton) on Feb 14, 2018 at 18:39 UTC

    Many thanks, Thanos (runs way faster than what I expected)

      Hello again Gtforce,

      Since you are also interested in speed and resources here is a small Benchmark measurement including three different ways of resolving your problem:

      A minor note here, if you use while loop it is a bit faster than foreach loop but it destroys the array.

      In conclusion on this case map looks to be the best option and it can be put it like this on a function:

      Hope this helps, BR.

      Seeking for Perl wisdom...on the process of learning...not there...yet!