Hi Gary,

> Unfortunately some strings have a 'S' instead of a 5 or a 'B' instead of a 8
> 
> The fields are of the format
> 
> Registration  XX99XXX
> Stock no              XX99999
> VIN                   XXXXXX99999
> 
> I've been experimenting with translate to convert the letters to the correct 
> digit, but can't work out an easy way to only translate the digits.  There 
> may genuinely be 'B' and 'S' in the 'X' positions.

You can use s///e to only tr the '9' entries:
(for the e-Modifier see e.g. [1, Regex Modifiers])

#!/usr/bin/env perl
use warnings;
use strict;
my $string = "Registration AASBBBB";
print "before: $string\n";
$string =~ s{^Registration\s*([a-zA-Z]{2})([0-9SB]{2})([a-zA-Z]{3})$}{
             "Registration $1" . $2 =~ tr/SB/58/r . "$3"}e;
print "after: $string\n";


output:
before: Registration AASBBBB
after: Registration AA58BBB

is this what you want?
Regards, Simon

[1] http://onyxneon.com/books/modern_perl/

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to