Как я могу заменить aeiou на bfjpv в Perl? - PullRequest
1 голос
/ 02 октября 2010

Я хочу заменить aeiou на bfjpv в строке, введенной пользователем. Вот код, который не работает: -

print "Enter any String :";
while(($string = <>) ne "\n"){

    @arr = split(//,$string);

    for($i = 0 ; $i < $#arr ; $i++){
        $char = $arr[$i];

        if($char eq 'a' || $char eq 'e' || $char eq 'i' || $char eq 'o' || $char eq 'u'){
            $char = $char + 1;
        }
        print $char;
    }

}

Что я должен сделать, чтобы добавить один символ? Я имею в виду, как заменить a на b.

Ответы [ 3 ]

10 голосов
/ 02 октября 2010

Вы можете просто сделать

$char++;

вместо

$char = $char + 1;

Кроме того, вам не нужно зацикливаться, чтобы сделать замену. Просто используйте оператор tr как:

($new_string = $string) =~ tr [aeiou] [bfjpv];
7 голосов
/ 02 октября 2010
$string =~ tr/aeiou/bfjpv/;

делает всю работу. См. Руководство perlop .

4 голосов
/ 02 октября 2010
$char = chr(ord($char) + 1);

ord = преобразовать символ в целое число

chr = преобразовать целое число в символ

...