I don't quite understand the question. A regexp cannot change the string, it can only extract portions of the string.
If you mean an substutation and you can evaluate the substitution part (but why would you then be limited to evaluate inside a s///?), you can use the following simple technique.
s/(.*)/substr $1 . '0' x 13, 0, 13/se
You just create a new string with all the zeros you could possibly need at the end, and then take the chars from the beginning.
my @codes = (
'12345678',
'1234567890123',
'1234567890123456',
);
my $len = 13;
for my $var (@codes) {
my $fixed = substr $var . '0' x $len, 0, $len;
print "$fixed\n";
}
__END__
1234567800000
1234567890123
1234567890123
lodin |