#!c:\strawberry\perl\bin\perl use strict; use warnings; use feature qw/:5.10/; use Regexp::Assemble; binmode( STDOUT, ":utf8" ); my $ra; say "SGB".chr(0x2009)."I"; #gives the expected output my %dispatch = ( '(SGB)[\s\xa0](I)' => sub { $ra->mvar(1) . chr(65) . $ra->mvar(2) }, #works # '(SGB)[\s\xa0](I)' => sub { $ra->mvar(1) . chr(0x2009) . $ra->mvar(2) }, #crashes '(Art\.)[\s\xa0]?(\d)' => sub { $ra->mvar(1) . 'x' . $ra->mvar(2) }, ); $ra = Regexp::Assemble->new( track => 1 )->add( keys %dispatch ); while () { while ( $ra->match($_) ) { my $m = $ra->matched; s/$m/&{$dispatch{$m}}/e; } print; } __DATA__ Dies ist ein Test für SGB I und spacing Art. 1 zum Beispiel ist hier es könnte aber auch Art 3 sein