use strict; use Spreadsheet::ParseExcel; use Data::Dumper; use warnings; my $parser=Spreadsheet::ParseExcel->new(); my $workbook=$parser->parse('C:\Perl\perl_tests\Sample.xls'); if(!defined $workbook) { die $parser->error(),".\n"; } my $worksheet=$workbook->worksheet('Sheet1'); my %student_data; for my $row(1..$worksheet->row_range) { my $super_key=$worksheet->get_cell($row,0)->value; for my $col(0..4) { my $key=$worksheet->get_cell(0,$col)->value; my $value=$worksheet->get_cell($row,$col)->value; ##here I am getting a problem## $student_data{$super_key}->{$key}=$value; } } foreach my $student_name(sort keys %student_data) { foreach my $attribute (keys%{$student_data{$student_name}}) { if($student_data{$student_name}{$attribute} eq "x") { print("$student_name-->$attribute\n"); } } print("\n"); }