Hi Aruna The solution
my $invexcl = "\x{00A1}"; my $atsign = "\x{0040}"; $mailreci =~ s/(\w+)$invexcl(\w+)/$1$atsign$2/g; works fine. However that assumes that you know the control character to be substituted. If the file contains lots of control characters and if the requirement is to remove all of them or to substitute all of them with some ascii character etc, my solution is preferred. By the way, how do you find the octal / hexadecimal code of control character that appears in the file. I use UNIX "ob -bc" command for the same but even that is also cumbersome if there are many lines and many control charcters. Regards, Amit Saxena On Mon, Jun 30, 2008 at 7:05 PM, Aruna Goke <[EMAIL PROTECTED]> wrote: > Amit Saxena wrote: > >> Try >> >> $email =~ s/[[:cntrl:]]/@/g; >> >> instead of >> >> $email =~ s/!/@/g; >> >> Infact try this in the entire file. >> >> Note :- This is on the assumption that there are no other control >> characters in the input file. >> >> On Fri, Jun 27, 2008 at 2:51 AM, Aruna Goke <[EMAIL PROTECTED] <mailto: >> [EMAIL PROTECTED]>> wrote: >> >> David Romero wrote: >> >> use a regular expression >> >> my $email = 'user!dominio.com <http://dominio.com>'; >> $email =~ s/!/@/g; >> ###Result [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> >> >> http://www.troubleshooters.com/codecorn/littperl/perlreg.htm >> >> >> On Thu, Jun 26, 2008 at 1:35 PM, Aruna Goke <[EMAIL PROTECTED] >> <mailto:[EMAIL PROTECTED]>> wrote: >> >> hi, >> >> i have the this log from my sms gateway, however, the >> inverted exclamation >> mark was sent from the smsc as @. >> >> 2008-06-26 17:22:35 SMS request sender:+2342019122 request: >> 'maruna¡ontng.com <http://ontng.com>,test,Love my test >> message' file answer: '' >> 2008-06-26 17:27:17 Receive SMS [SMSC:caxt] [SVC:] [ACT:] >> [BINF:] >> [from:+2342019122] [to:+2349191] [flags:-1:0:-1:0:-1] >> [msg:43:maruna!ontng.com <http://ontng.com>,test,Love my >> test message] [udh:0:] >> 2008-06-26 17:27:17 SMS request sender:+23422019122 request: >> 'maruna!ontng.com <http://ontng.com>,test,'Love my test >> message'file answer: '' >> 2008-06-26 17:34:15 Receive SMS [SMSC:caxt] [SVC:] [ACT:] >> [BINF:] >> [from:+2342019122] [to:+2349191] [flags:-1:0:-1:0:-1] >> [msg:43:maruna¡ontng.com <http://ontng.com>,test,Love my >> test message] [udh:0:] >> >> I have my script that parse the file and extract as below >> >> To: maruna¡ontng.com <http://ontng.com> Subject: test >> Message: Love my test message sender : >> [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> >> >> >> What i want to achieve is to translate the to address back to >> [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> instaed of >> maruna¡ontng.com <http://ontng.com>. >> >> when i checked through, i discover that it is inverted >> exclamation mark with >> character code 00A1 from unicode(hex) of latin-1 subset. I >> need this >> translated to @, any help will be appreciated >> >> >> my script is as below >> >> #!/usr/bin/perl >> >> use strict; >> use warnings; >> use File::Tail; >> use Mail::Sender; >> >> >> # the access.log is read and the following, recepient is >> extracted. >> >> my $name = "/var/log/bulksms/sms_access.log"; >> my ($mailreci, $mailsubj, @sms, $mailmsg, $mailsend, >> $sendee, $sender, $msg, >> $domain); >> $domain = 'ontng.com <http://ontng.com>'; >> open my $file, '<', $name or die "could not open $name: $!"; >> $file=File::Tail->new(name=>$name, maxinterval=>3, >> adjustafter=>5); >> while (defined($_=$file->read)) >> { >> @sms = split/\[/; >> next unless $sms[6]=~/to:\+2349191\]/; >> $sendee = $sms[5]; >> $sendee =~ s/from:\+(\d+)\]/$1/; >> $sendee = "[EMAIL PROTECTED]"; >> $msg = $sms[8]; >> $msg = (split/:/, $msg)[-1]; >> $msg =~ s/(\w+)\s?\]/$1/; >> # i need only sender and $msg >> ($mailreci, $mailsubj, $mailmsg) = (split/,/, $msg, >> 3)[0..2]; >> >> print "To: $mailreci Subject: $mailsubj Message: >> $mailmsg sender : >> $sendee\n"; >> >> } >> >> >> >> >> -- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> <mailto:[EMAIL PROTECTED]> >> For additional commands, e-mail: [EMAIL PROTECTED] >> <mailto:[EMAIL PROTECTED]> >> http://learn.perl.org/ >> >> >> >> >> >> >> >> its not an exclamation mark but inverted exclammation mark. >> >> >> >> >> -- To unsubscribe, e-mail: [EMAIL PROTECTED] >> <mailto:[EMAIL PROTECTED]> >> For additional commands, e-mail: [EMAIL PROTECTED] >> <mailto:[EMAIL PROTECTED]> >> http://learn.perl.org/ >> >> >> >> > my $invexcl = "\x{00A1}"; > my $atsign = "\x{0040}"; > $mailreci =~ s/(\w+)$invexcl(\w+)/$1$atsign$2/g; > > I have used that above code to do the conversion and it seems to work now. > > Goksie > > >