I suppose without knowing exactly how the original poster intends to use the data, it's hard to say if this would be better, but might it be even easier to use a multidimensional hash in this case?
Example:
%data = (
"1111$;Cabin" => {
'Ad1' => '01 Charles St',
'City' => 'CA',
'name' => 'Claud Odur',
'state' => 'CA',
'zCode' => '2334'
},
# ...
# snip
# ...
"8888$;Test" => {
'Ad1' => '2AAAA',
'City' => 'BB',
'name' => 'BXBXBX',
'state' => 'HH',
'zCode' => 'WWWW'
}
);
# Now elements of the data can be accessed like this
my $val = $data{'1111','Cabin'}->{'City'};
# Or, to get a slice of rows where status is 'Main', you could do this
+:
my @main = @data{grep /$;Main$/, keys %data}
Edit: Added the line about accessing rows where status 'Main'