Question

Je veux faire quelque chose comme ça

$string ='4791';
$string =~ tr/4791/(ma)(laya)(lam)(_baasha)/;

devrait me donner

$string='malayalam_baasha';

c'est-à-dire remplacer chaque caractère par n autres caractères.n peut être différent pour chaque caractère.

Existe-t-il une solution en une ligne pour cette traduction?

Était-ce utile?

La solution

En supposant que vous vouliez toujours remplacer un seul caractère par une chaîne spécifique ...

my %Replacement = (
    '0' => 'abc',
    '1' => 'def',
    '2' => 'ghi',
    '3' => 'jkl',
    # ... whatever others you like ...
);

my $String = '0123';
print "$String\n"; # Prints "0123"
$String =~ s{(.)}
            {exists($Replacement{$1}) ? $Replacement{$1} : $1}egx;
print "$String\n"; # Prints "abcdefghijkl"

Relisez votre question, non, ce n'est pas sur une seule ligne, bien qu'elle puisse être écrite comme telle (bien que malpropre) si vous le souhaitez.Le restreindre à une seule ligne dépendra en quelque sorte du nombre d'échanges différents que vous souhaitez avoir, cependant.Après un certain temps, ça va devenir moche.

Autres conseils

La bonne réponse est celle de Brian Gerard, mais cela peut être fait en une ligne assez courte et presque lisible:

$string =~ s/(.)/{1 => "_baasha", 4 => "ma", 7 => "laya", 9 => "lam"}->{$1}/ge;

ou une courte ligne illisible:

$string =~ s/(.)/{4,ma=>7,laya=>9,lam=>1,"_baasha"}->{$1}/ge;

ou même plus court, mais un peu plus lisible:

$string =~ s/(.)/qw(a _baasha a a ma a a laya a lam)[$1]/ge;

ou le plus court que je puisse obtenir (celui-ci ne fonctionnera pas avec strict activé):

$string =~ s/(.)/(a,_baasha,a,a,ma,a,a,laya,a,lam)[$1]/ge;

Ceci

($i=0) || (@tr = qw |abc def ghi jkl| ) && (@string = map { $tr[$i++] } split //,'0123') && ($string =join '',@string);

OU

( %tr = ( 0 => 'abc' , 1 => 'def' , 2 => 'ghi' , 3 => 'jkl' ) ) && (@string = map { $tr{$_} } split //,'0123') && ($string =join '',@string); 

devrait fonctionner!Mais je ne l'utiliserais pas !!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top