Thanks, David. I figured out how to do this recursively. Hopefully the
code beow will clarify my question, even though I no longer need an
answer.

sub translit {
  my($str) = @_;
  my($oth) = $str;
  my(@res);

  # obviously, this could be improved to not hardcode o->xy, a->uv
  if ($str=~/o/) {
    $oth=~s/o/x/; # NOT global
    push(@res,translit($oth));
    $str=~s/o/y/;
    push(@res,translit($str));
    return @res;
  }

  if ($str=~/a/) {
    $oth=~s/a/u/; # NOT global
    push(@res,translit($oth));
    $str=~s/a/v/;
    push(@res,translit($str));
    return @res;
  }

  return $str;
}

-- 
We're just a Bunch Of Regular Guys, a collective group that's trying
to understand and assimilate technology. We feel that resistance to
new ideas and technology is unwise and ultimately futile.

On 4/10/09, Wagner, David --- Senior Programmer Analyst --- CFS
<david.wag...@fedex.com> wrote:
>> -----Original Message-----
>> From: Kelly Jones [mailto:kelly.terry.jo...@gmail.com]
>> Sent: Friday, April 10, 2009 13:33
>> To: beginners@perl.org
>> Subject: Replace string with list of strings via character changes
>>
>> I want to replace all the o's in a string with x's or y's and all the
>> a's in a string with u's or v's.
>>
>> Example: given string "foobar", the output would be this list
>> of strings
>>
>> fxxbur (change both o's to x, and the a to u)
>> fxxbvr (both o's to x, a to y)
>> fxybur (first o to x, second to y, and the a to u)
>> fxybvr (and so on...)
>> fyxbur
>> fyxbvr
>> fyybur
>> fyybvr
>       I am not following at all given what you state you want to do,
> then in your example you have something else and then add in ( and so
> on... ).
>
>       Do you want to change o's to x one time and y the next and a to
> u then y the next time?????
>
> Wags ;)
> David R. Wagner
> Senior Programmer Analyst
> FedEx Freight
> 1.719.484.2097 TEL
> 1.719.484.2419 FAX
> 1.408.623.5963 Cell
> http://fedex.com/us
>
>>
>> What's the best subroutine to do this? I've got some ideas, but
>> they're all fairly complex.
>>
>> Reason I'm doing this (if anyone cares): I want to ASCII-ify the
>> geonames alternatenames table using iso-8859-1. Most of the
>> translations are obvious:
>>
>> s/[\xc0-\xc5]/A/sg;
>> s/\xc6/AE/sg;
>> s/\xc7/C/sg;
>> s/[\xc8-\xcb]/E/sg;
>> s/[\xcc-\xcf]/I/sg;
>> s/\xd1/N/sg;
>> s/[\xd2-\xd6\xd8]/O/sg;
>> s/[\xd9-\xdc]/U/sg;
>> s/\xdd/Y/sg;
>> s/[\xe0-\xe5]/a/sg;
>> s/\xe6/ae/sg;
>> s/\xe7/c/sg;
>> s/[\xe8-\xeb]/e/sg;
>> s/[\xec-\xef]/i/sg;
>> s/\xf1/n/sg;
>> s/[\xf2-\xf6\xf8]/o/sg;
>> s/[\xf9-\xfc]/u/sg;
>> s/[\xfd\xff]/y/sg;
>>
>> but "eth" can be translated as "d" or "dh", "thorn" can be translated
>> as "th" or "y", and "sharp s" can be translated as "ss" or "sz".
>>
>> In all cases, I want to use *both* translations to have the largest
>> possible ASCII-ification.

-- 
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