use utf8; binmode STDIN, ':encoding(UTF-8)'; binmode STDOUT, ':encoding(UTF-8)'; open(READ, "test.txt"); @lines = ; close(READ); print "Found ".@lines." lines.\n"; open(WRITE, ">test-result.txt"); foreach (@lines) { $_ =~ s/([\x{4E00}-\x{9FFF}]+?)\(([\x{3040}-\x{309F}]+?)\)/\\ruby{\1}{\2}/g; print WRITE $_; } close(WRITE);