I think Text::Table may do what you want. Here is a basic example based on your code.
use strict;
use warnings;
use Data::Dumper;
use Text::Table;
my %data = (
A => { A => 5, R => -2, N => -1 },
R => { A => -2, R => 7, N => -1 },
N => { A => -1, R => -1, N => 7 },
);
my @keys = sort keys %data;
my $tb = Text::Table->new( '', @keys );
for my $row (@keys) {
my @values;
push @values, $data{$row}{$_} for @keys;
$tb->load( [$row, @values] );
}
print $tb;
Output
A N R
A 5 -1 -2
N -1 7 -1
R -2 -1 7
With A:A changed to 1500
A N R
A 1500 -1 -2
N -1 7 -1
R -2 -1 7