in reply to compound structure? 4way-hash

That isn't directly possible. You can store the data in an array of hashes and use four hashes with references to the entries.
my @address; my %by_name = map { ($_->{name}, $_) } @address; my %by_file = map { ($_->{file}, $_) } @address; my %by_mac = map { ($_->{mac}, $_) } @address; my %by_ip = map { ($_->{ip}, $_) } @address; print $by_ip{"1.2.3.4"}{name}, $by_name{foobar}, "\n";
The drawback of course is that whenever the @address data changes you have to update the index hashes accordingly.

Makeshifts last the longest.