#!/usr/bin/env perl -l use strict; use warnings; use Text::CSV; use Inline::Files; use Data::Dump; my %data; my $csv = Text::CSV::->new; while (my $row = $csv->getline(\*CSV1)) { @{$data{$row->[0]}}{qw{mem lang}} = @$row[1,2]; } while (my $row = $csv->getline(\*CSV2)) { @{$data{$row->[0]}}{qw{cpu cores}} = @$row[1,2]; } print 'CSV data merged into hash:'; dd \%data; print 'Query data: apps with 2 cores:'; print $_ for grep { $data{$_}{cores} == 2 } sort keys %data; __CSV1__ App1,4,Perl App2,8,Java App3,8,Java App4,4,PHP App5,8,C# __CSV2__ App1,1.5,2 App2,2.5,4 App3,2.8,4 App4,2.8,2 App5,2.8,2 #### CSV data merged into hash: { App1 => { cores => 2, cpu => 1.5, lang => "Perl", mem => 4 }, App2 => { cores => 4, cpu => 2.5, lang => "Java", mem => 8 }, App3 => { cores => 4, cpu => 2.8, lang => "Java", mem => 8 }, App4 => { cores => 2, cpu => 2.8, lang => "PHP", mem => 4 }, App5 => { cores => 2, cpu => 2.8, lang => "C#", mem => 8 }, } Query data: apps with 2 cores: App1 App4 App5