use strict; use warnings; my $Profile = "C:\\registry.reg"; # unicode file my $old_name = 'Foo'; my $new_name = 'Bar'; my @reg_file; { open(my $fh, '<:raw:perlio:encoding(UTF-16):crlf', $Profile) or die("Can't open file $Profile: $!\n"); @reg_file = <$fh> } for (@reg_file) { s/ ^ ( \[ HKEY_LOCAL_MACHINE\\SOFTWARE\\ ) $old_name ( (?:\\.*)? \] ) /$1$new_name$2/x; } { open(my $fh, '>:raw:perlio:encoding(UTF-16le):crlf', $Profile) or die("Can't overwrite file $Profile: $!\n"); print $fh "\x{FEFF}", @reg_file; }