open (CSV, "<", $file) or die $!; my %subhash; for my $line ( split "\n" ) { my( $key, $value ) = split /\s+;\s+/, $line; $subhash{ $key } = $value; } $hash{ $subhash{ $file } } = \%subhash; }