#! perl -slw use strict; my( %users, @linux, @win32 ); my @pcs = ( [ 'win32', 'dave' ], [ 'linux', 'john' ], [ 'win32', 'robin' ], ); for( 0 .. $#pcs ) { my $pc = $pcs[ $_ ]; $users{ $pc->[1] } = $_; push @{ $pc->[0] eq 'linux' ? \@linux : \@win32 }, $_; } print 'Linux users: ', join ' ' , map{ $_->[1] } @pcs[ @linux ]; print "Dave's pc is number $users{ dave } attributes:" , join ' ', @{ $pcs[ $users{ dave } ] }; print "Win32 pc numbers: @win32\n\t" , join "\n\t", map{ join ':', @$_ } @pcs[ @win32 ]; __END__ Linux users: john Dave's pc is number 0 attributes:win32 dave Win32 pc numbers: 0 2 win32:dave win32:robin