http://qs321.pair.com?node_id=1108218


in reply to Array and Hash

Hi waytoperl,

Considering, the __DATA__ and the hash data presented, there is no way you are getting this desired output

Pigeon.Lion.Tiger.Elephant SOME_DATA (Key1) Pigeon.Lion.Tiger.Monkey SOME_DATA (Key3)
Why?
Something like this:
use warnings; use strict; my %hash = ( 'Key1' => 'Cat.Mouse.Game.Lion.Tiger.Elephant', 'Key2' => 'Cat.Mouse.Game.Lion.Tiger.Lion', 'Key3' => 'Cat.Mouse.Game.Lion.Tiger.Monkey', ); while ( my $data = <DATA> ) { chomp($data); my $value = join '.' => ( split /[\s.]/, $data )[ 1 .. 3 ]; print map { "$data ($_)\n" if $hash{$_} =~ /$value/ } keys %hash; } __DATA__ Pigeon.Lion.Tiger.Elephant SOME_DATA Pigeon.Lion.Tiger.SeaLion SOME_DATA Pigeon.Lion.Tiger.Monkey SOME_DATA
OUTPUT
Pigeon.Lion.Tiger.Elephant SOME_DATA (Key1) Pigeon.Lion.Tiger.Monkey SOME_DATA (Key3)
Please note that the input data has been changed from what the OP gave.

With the OP input, the output will be:
Pigeon.Lion.Tiger.Elephant SOME_DATA (Key1) Pigeon.Lion.Tiger.Lion SOME_DATA (Key2) Pigeon.Lion.Tiger.Monkey SOME_DATA (Key3)

If you tell me, I'll forget.
If you show me, I'll remember.
if you involve me, I'll understand.
--- Author unknown to me