Glenn Linderman wrote:
> So I'm trying to make a sub to tr iso-8859-1 to unaccented ASCII
> equivalents. Maybe one already exists, somewhere, but now that I've
> gotten this far, I'm confused:
>
> #!perl
Where's your use strict and use warnings ?
> BEGIN {
> my ( $tfrom, $tto );
> $tfrom = 'AàÀáÁâÂãÃäÄåÅæÆBCçÇDðÐEèÈéÉêÊëËFGHIìÌíÍîÎïÏJKLM';
> $tto = 'aaaaaaaaaaaaaaabcccdddeeeeeeeeefghiiiiiiiiijklm';
> $tfrom .= 'NñÑOòÒóÓôÔõÕöÖøØPQRSßTþÞUùÙúÚûÛüÜVWXYýÝÿZ';
> $tto .= 'nnnooooooooooooopqrsstttuuuuuuuuuvwxyyyyz';
> eval <<END_OF_SUB
> sub tr_iso_8859_1__ASCII
> { my ( \$name ) = @_;
> \$name =~ tr/$tfrom/$tto/;
> print "in: \$_[ 0 ] out: \$name\n";
> return ( \$name );
> }
> END_OF_SUB
You need an ';' here.
> }
>
> &
> tr_iso_8859_1__ASCII('abcdefABCDEFAàÀáÁâÂãÃäÄåÅæÆBCçÇDðÐEèÈéÉêÊëËFGHIìÌíÍîÎïÏJKLM');
> __END__
>
> produces
>
> Undefined subroutine &main::tr_iso_8859_1__ASCII called at
> d:\my\perl\src\test-tr.pl line 17.
>
> which is the last line of the code. So what about eval, or what about
> BEGIN, or what about my syntax, is causing the sub not to be available
> later... and how do I work around it?
>
> Naturally the BEGIN/eval idea was formulated so that I could use
> variables to help define the tr parameters, mostly just to avoid long
> lines, and I already have the sub working using long lines with
> hard-coded strings. But why doesn't this one work?
Here's my attempt:
use strict;
use warnings;
my $tfrom = 'AàÀáÁâÂãÃäÄåÅæÆBCçÇDðÐEèÈéÉêÊëËFGHIìÌíÍîÎïÏJKLMNñÑ' .
'OòÒóÓôÔõÕöÖøØPQRSßTþÞUùÙúÚûÛüÜVWXYýÝÿZ';
my $tto = 'aaaaaaaaaaaaaaabcccdddeeeeeeeeefghiiiiiiiiijklmnnn' .
'ooooooooooooopqrsstttuuuuuuuuuvwxyyyyz';
eval <<END_OF_SUB
sub tr_iso_8859_1__ASCII {
my \$name = \$_[0];
\$name =~ tr/$tfrom/$tto/;
print "in : \$_[0]\nout: \$name\n";
return \$name;
}
END_OF_SUB
;
tr_iso_8859_1__ASCII(
'abcdefABCDEFAàÀáÁâÂãÃäÄåÅæÆBCçÇDðÐEèÈéÉêÊëËFGHIìÌíÍîÎïÏJKLM');
__END__
_______________________________________________
Perl-Win32-Users mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs