in reply to dereferencing a double array

If you are always going to be accessing arbitrary rows and columns, not whole rows at once, you could consider using perl4's emulated multidimensional arrays (see $;), like so:
my %matrix; $matrix{0,0} = 1; $matrix{0,1} = 0; $matrix{1,1} = 1; $matrix{1,0} = 0;
Then copying is just a matter of saying my %new_matrix = %$matrix_ref;