But I was able to install PDL 5.080 with Perl 5.32.1, to get slightly newer PDL but slightly older Perl than you. But it showed the same dimensional difference.
#!perl -l
use 5.012; # //, strict, say
use warnings;
use PDL 2.057;
#use PDL::Matrix;
print "perl version $]";
print "PDL version $PDL::VERSION";
print my $red_in = (pdl [ # reference
[419 , 17 ], # p01
[772 , 13 ], # p02
[348 , 102], # p03
[720 , 95 ], # p04
[58 , 238], # p05
[218 , 236], # p06
[55 , 333], # p07
[58 , 391], # p08
[60 , 498], # p09
[58 , 554], # p10
[1061, 553], # p11
[60 , 892], # p12
])->append(ones(1))->transpose;
print my $red_out = (pdl [ # target_41
[487, 466], # p01
[531, 630], # p02
[439, 447], # p03
[486, 618], # p04
[340, 328], # p05
[358, 401], # p06
[297, 343], # p07
[274, 349], # p08
[227, 366], # p09
[205, 374], # p10
[313, 809], # p11
[77 , 420], # p12
])->append(ones(1))->transpose;
print my $blue_in = (pdl [ # reference
[438,331], # q01
[432,392], # q02
[436,493], # q03
[436,552], # q04
[439,602], # q05
])->append(ones(1))->transpose;
print my $blue_out_for_checking = (pdl [ # target_41
[339,508], # q01
[314,518], # q02
[265,533], # q03
[245,537], # q04
[228,544], # q05
])->append(ones(1))->transpose;
$\ = '';
print for
"sx = ", my $sx = sum( $red_in->transpose->slice(0) ),
+ "\n",
"sy = ", my $sy = sum( $red_in->transpose->slice(1) ),
+ "\n",
"s1 = ", my $s1 = sum( $red_in->transpose->slice(2) ),
+ "\n",
"sxx = ", my $sxx = sum( $red_in->transpose->slice(0)**2 ),
+ "\n",
"syy = ", my $syy = sum( $red_in->transpose->slice(1)**2 ),
+ "\n",
"sxy = ", my $sxy = sum( $red_in->transpose->slice(0)*$red_in->tra
+nspose->slice(1) ), "\n",
"sv = ", my $sv = sum( $red_out->transpose->slice(0) ),
+ "\n",
"sw = ", my $sw = sum( $red_out->transpose->slice(1) ),
+ "\n",
"sxv = ", my $sxv = sum( $red_in->transpose->slice(0)*$red_out->tr
+anspose->slice(0) ), "\n",
"sxw = ", my $sxw = sum( $red_in->transpose->slice(0)*$red_out->tr
+anspose->slice(1) ), "\n",
"syv = ", my $syv = sum( $red_in->transpose->slice(1)*$red_out->tr
+anspose->slice(0) ), "\n",
"syw = ", my $syw = sum( $red_in->transpose->slice(1)*$red_out->tr
+anspose->slice(1) ), "\n",
;
$\ = "\n";
print "G => ", my $G = pdl
[
[ $sxx, $sxy, $sx ],
[ $sxy, $syy, $sy ],
[ $sx, $sy, $s1 ],
];
print "Q => ", my $Q = pdl
[
[ $sxv, $sxw ],
[ $syv, $syw ],
[ $sv, $sw ],
];
print "P => ", my $P = inv($G) x $Q;
# print "P->transpose", $P->transpose;
# print "P->append->transpose", $P->append(zeros(1))->transpose;
print "abcdef001 => ", my $abcdef001 = $P->append(zeros(1))->transpose
+->set(2,2,1);
print "blue out calc => ", my $blue_out_calc = $abcdef001 x $blue_in;
print "error => ", $blue_out_calc - $blue_out_for_checking; # no more
+than one pixel off
__END__
perl version 5.032001
PDL version 2.080
[
[ 419 772 348 720 58 218 55 58 60 58 1061 60]
[ 17 13 102 95 238 236 333 391 498 554 553 892]
[ 1 1 1 1 1 1 1 1 1 1 1 1]
]
[
[487 531 439 486 340 358 297 274 227 205 313 77]
[466 630 447 618 328 401 343 349 366 374 809 420]
[ 1 1 1 1 1 1 1 1 1 1 1 1]
]
[
[438 432 436 436 439]
[331 392 493 552 602]
[ 1 1 1 1 1]
]
[
[339 314 265 245 228]
[508 518 533 537 544]
[ 1 1 1 1 1]
]
sx = 3887
sy = 3922
s1 = 12
sxx = 2604611
syy = 2052390
sxy = 929565
sv = 4034
sw = 5551
sxv = 1608891
sxw = 2354880
syv = 945962
syw = 1755275
G =>
[
[2604611 929565 3887]
[ 929565 2052390 3922]
[ 3887 3922 12]
]
Q =>
[
[1608891 2354880]
[ 945962 1755275]
[ 4034 5551]
]
P =>
[
[0.11504241 0.44420653]
[-0.4325134 0.11994661]
[ 440.26231 279.49489]
]
abcdef001 =>
[
[0.11504241 -0.4325134 440.26231]
[0.44420653 0.11994661 279.49489]
[ 0 0 1]
]
blue out calc =>
[
[ 347.48895 320.41538 277.19169 251.6734 230.39286]
[ 513.75967 518.41118 532.30261 539.37946 546.70941]
[ 1 1 1 1 1]
]
error =>
[
[ 8.488949 6.4153774 12.191694 6.6734037 2.3928612]
[ 5.7596723 0.41117608 -0.69739064 2.3794591 2.709409]
[ 0 0 0 0 0]
]
This shows the 12-ish pixel error, but will hopefully work with your 2.057 (and definitely worked with my 2.080).