use strict; my $props = {}; while (<>) { tr/\x0d\x0a//d; my $file_name = $_; warn $file_name; open my $file, '<', $file_name or die "$0: $file_name: $!"; my $last_prop = ''; while (<$file>) { tr/\x0d\x0a//d; if (s/^\s+//) { $props->{$last_prop}->{$_}++; } else { my $p = $_; if ($p =~ s/:([^:]+)$//) { my $v = $1; $v =~ s/^\s+//; $props->{$p}->{$v}++; } else { $p =~ s/:\s*$//; } $props->{$last_prop = $p}->{'__prop__'}++; } } } use Data::Dumper; print Dumper ($props);