Well, if you put the use open ':utf8'; in the header of your perl script, it should work without the hex editor (btw: I would recommend using emacs in hex mode (M-x hexl-find-file). And just for the record: to put the entire file in one array, use this: my @lines = <>; my $text = join "", @lines; $text =~ s/PUT_YOUR/SUBSTITUIONS_HERE/esg; But it looks like you got a working solution now, so have fun playing around with it. And boy does it make one feel good when you realize that you windoze people are still working with perl 5.6 -- that's the stone age, man ;-) Best Thomas On Sun, 2004-06-06 at 23:03, Idris Samawi Hamid wrote:
On Sun, 6 Jun 2004 11:09:32 +0200, Henning Hraban Ramm
wrote: -----
#!/usr/bin/perl -w use strict; use warnings;
my ($Source, $Target) = (shift, shift); # gets 2 file names from command line
my %conv = ( # enhance as needed "\xD8xA7" => "A", "\xD8xA8" => "b", "\xD8xAC" => "j", "\xD8xAF" => "d" );
open SOURCE, "<", $Source || die $!; open TARGET, ">", $Target || die $!; # there are ways to read a whole file in one scalar, # e.g. with File::Slurp, but I don't know them by heart... while (my $line = <SOURCE>) { foreach my $key (keys %conv) { $line =~ s/$key/$conv{$key}/g; } # foreach print TARGET $line; } # while close SOURCE; close TARGET;
-----
Thnx; I'll play around with this as well. BTW: is there any way to do this without the hex editor and just enter the full 4-digit character (a la Thomas's original suggestion) e.g.,
"\x0627" => "A"
While the hex editor certainly works it is really slow and tedious work...
BTW: ActiveState has Perl 5.8.4, at least for Windows (I use it at work).
Ok, I found it:
http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.3.809...
But the web site (at first glance) sure gives one the impression that their latest release is 5.6.1.638
http://www.activestate.com/Products/ActivePerl/
Best Idris