#!/usr/bin/perl
use strict;
my %coord_;
$coord_{"AB"}{1} = [420,520,870];
$coord_{"AB"}{2} = [220,520,470];
$coord_{"AB"}{6} = [320,320,270];
$coord_{"AB"}{7} = [520,720,370];
$coord_{"AB"}{8} = [620,520,670];
$coord_{"PL"}{12} = [420,520,570];
$coord_{"PL"}{13} = [220,520,170];
$coord_{"B"}{2} = [320,720,670];
$coord_{"B"}{4} = [520,520,170];
$coord_{"B"}{5} = [620,820,370];
foreach my $key1 (sort keys %coord_)
{
foreach my $key2 (sort keys %{$coord_{$key1}})
{
printf "%s %d = X:%d, Y:%d, Z:%d\n",
$key1, $key2, @{$coord_{$key1}{$key2}};
}
}
The ordering of output isn't quite what you wanted, but that can't be helped with a hash, since it doesn't preserve the order in which you insert the elements.
-Matt