Ax~B~xCx~xDx
... emitować ...
A~-B-~C~-~D~
Chcę wymienić ~ znaków z - a x znaków z ~.
mogę napisać ...
s/~/-/g;s/x/~/g;
... ale to (wygląda na to) przechodzi nad ciągiem dwukrotnie.
Ax~B~xCx~xDx
... emitować ...
A~-B-~C~-~D~
Chcę wymienić ~ znaków z - a x znaków z ~.
mogę napisać ...
s/~/-/g;s/x/~/g;
... ale to (wygląda na to) przechodzi nad ciągiem dwukrotnie.
Użyj "transliterate" do zastąpienia w oparciu o znaki. Spróbuj tego:
tr/~x/\-~/;
Ponieważ masz do czynienia z pojedynczymi znakami, tr /// jest oczywista odpowiedź:
tr/~x/-~/;
jednak będziesz potrzebować s /// do czynienia z dłuższe sekwencje:
my %subs = ('~' => '-', 'x' => '~');
my $pat = join '|', map quotemeta, keys %subs;
s/($pat)/$subs{$1}/g;
Dlaczego warto korzystać z RegEx? Dlaczego samemu nie powtórzyć ciągu? –
Ponieważ to ... jest ... PEEEEEEEEEERL !!!! Nah bardziej poważnie, regexes są znacznie krótsze i szybsze niż pisanie całego materiału. – m0skit0
@CoreyOgburn Ponieważ jeśli IE iteracji ciągu ciągu siebie, piszę C (lub FORTRAN?) W perlu, a celem jest napisanie perl. –