der m// operator verändert das $test nicht. die zu filternden teile des regex werden lediglich in die variablen $1, $2 und $3 geschrieben. das war doch eigendlich aus relais posting ersichtlich.
da ein regex die werte aber auch zurückgeben kann, anstatt sie nur in reservierte variablen zu schreiben, bevorzuge ich übrigens folgende schreibweise:
my $input = '00117.00031.00846.00000.00000';
my @fetch = $input =~ m/00(\d\d\d)\.000(\d\d)\.00(\d\d\d)\.00000\.00000/;
my $res = join "", @fetch;
print "$res\n";
\n\n
<!--EDIT|Taulmarill|1129540173-->
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B