in reply to Find pieces of text in a file enclosed by `@` and replace the inside
The substitution operator is powerful. I'll let the regex engine do the parsing/splitting work.
use utf8; use strict; use warnings FATAL => 'all'; use Data::Munge qw(list2re); use File::Slurp qw(read_file write_file); my %tr = ( a => 'а', b => 'б', c => 'ц', A => 'А', B => 'Б', C => 'Ц', ); my $key = list2re keys %tr; my $text = read_file('test.txt', { binmode => ':encoding(UTF-8)' }); $text =~ s{ @ # fragment start ([^@]+) # capture characters inside (all except @) @ # fragment end }{ my $fragment = $1; $fragment =~ s{ ($key) }{ $tr{$1} }egmsx; $fragment; }egmsx; write_file('output.txt', { binmode => ':encoding(UTF-8)' }, $text);
In Section
Seekers of Perl Wisdom