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 = 'aaabcccdddefghijklm';
$tfrom .= 'NñÑOòÒóÓôÔõÕöÖøØPQRSßTþÞUùÙúÚûÛüÜVWXYýÝÿZ';
$tto .= 'nnnopqrsstttuvwxz';
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 = 'aaabcccdddefghijklmnnn' .
'opqrsstttuvwxz';
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
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs