use warnings; use strict; use utf8; use open qw/:std :utf8/; use Devel::Peek qw/Dump/; use Data::Dump; my %_table; sub load_map { while () { chomp; my ($esc,$bin) = split / /, $_, 2; $_table{$bin} = $esc; } } sub escapeUTF8 { my ($sgml_r) = @_; $$sgml_r =~ s{([^\x00-\x7F])} { exists $_table{$1} ? $_table{$1} : '?' }eg; } load_map(); dd \%_table; use Test::More tests=>1; my $SGML='RÖCHLING '; Dump $SGML; escapeUTF8(\$SGML); is $SGML, 'RÖCHLING '; __DATA__ $ $ Ö Ö » »