#!/usr/bin/env perl -l use strict; use warnings; my @matrix = ( [qw{A B C}], [qw{D E F}], [qw{G H I}], [qw{J K L}, [ [qw{M N O P Q}, [qw{R S T}], qw{U V W X Y Z}] ] ], ); my %dict = ( a => [0, 0], b => [0, 1], e => [1, 1], g => [2, 0], i => [2, 2], p => [3, 3, 0, 3], s => [3, 3, 0, 5, 1], ); for (qw{a b e g i p s}) { print "$_ => ", get_element(\@matrix, $dict{$_}); } sub get_element { my ($matrix, $coords) = @_; my $element = $matrix->[shift @$coords]; @$coords ? get_element($element, $coords) : $element; }