Hello,
I have the following script shown below that ~should~ convert a string of text. The conversion subroutine works fine, I just cannot figure out how to pass the $scan variable into the subroutine and get the sub to return the converted string ($output).
The $scan variable comes from a html form, it is a textfield that contains a string of characters. I know the form is passing the string to the script as I have added a print $scan line that shows that it does get passed.
Any and all help on this is greatly appreciated. I have been working on this for a while and cannot get it working to save my life.
TIA!!!
-jim
---begin code---
#!/usr/bin/perl
#
# divide the UPC into 4 groups of three digits
# use the scheme below to translate each digit into its output
#
# 1 2 3
#
# 0 C3 n Z
# 1 CN j Y
# 2 Cx f X
# 3 Ch b W
# 4 D3 D 3
# 5 DN z 2
# 6 Dx v 1
# 7 Dh r 0
# 8 E3 T 7
# 9 EN P 6
#
#
use CGI;
$co = new CGI;
$scan=$co->param('scan');
print $co->header;
$co->start_html();
print "input is: $scan<P>";
convert($scan);
print "output is now: $output";
sub convert {
%translation = ('C3', 0, 'n', 0, 'Z', 0, 'CN', 1, 'j', 1, 'Y', 1, 'Cx', 2,
'f', 2, 'X', 2, 'Ch', 3, 'b', 3, 'W', 3, 'D3', 4,
'D', 4, '3', 4, 'DN', 5, 'z', 5, '2', 5, 'Dx', 6, 'v',
6, '1', 6, 'Dh', 7, 'r', 7, '0', 7, 'E3', 8, 'T', 8,
'7', 8, 'EN', 9, 'P', 9, '6', 9);
%types = ('cGf2', 'ISBN', 'cGen', 'ISBN', 'fHmg', 'UPC', 'fGzX', 'UPC-E1');
while(<>) {
exit if $_ eq "\n";
if (!/^\.(.*)\.(....)\.(.*)\.$/) {
print "invalid code\n";
exit;
}
$id = $1;
$type = $2;
$code = $3;
$output = "";
while ($code =~ /^(..)(.?)(.?)(.*)/) {
$output = $output . $translation{$1};
$output = $output . $translation{$2};
$output = $output . $translation{$3};
$code = $4;
}
if ($types{$type} ne ""
{
print "$types{$type} ";
}
return ($output);
}
} #end sub
print "<P>output is: $output";
$co->end_html;
---end code---
I have the following script shown below that ~should~ convert a string of text. The conversion subroutine works fine, I just cannot figure out how to pass the $scan variable into the subroutine and get the sub to return the converted string ($output).
The $scan variable comes from a html form, it is a textfield that contains a string of characters. I know the form is passing the string to the script as I have added a print $scan line that shows that it does get passed.
Any and all help on this is greatly appreciated. I have been working on this for a while and cannot get it working to save my life.
TIA!!!
-jim
---begin code---
#!/usr/bin/perl
#
# divide the UPC into 4 groups of three digits
# use the scheme below to translate each digit into its output
#
# 1 2 3
#
# 0 C3 n Z
# 1 CN j Y
# 2 Cx f X
# 3 Ch b W
# 4 D3 D 3
# 5 DN z 2
# 6 Dx v 1
# 7 Dh r 0
# 8 E3 T 7
# 9 EN P 6
#
#
use CGI;
$co = new CGI;
$scan=$co->param('scan');
print $co->header;
$co->start_html();
print "input is: $scan<P>";
convert($scan);
print "output is now: $output";
sub convert {
%translation = ('C3', 0, 'n', 0, 'Z', 0, 'CN', 1, 'j', 1, 'Y', 1, 'Cx', 2,
'f', 2, 'X', 2, 'Ch', 3, 'b', 3, 'W', 3, 'D3', 4,
'D', 4, '3', 4, 'DN', 5, 'z', 5, '2', 5, 'Dx', 6, 'v',
6, '1', 6, 'Dh', 7, 'r', 7, '0', 7, 'E3', 8, 'T', 8,
'7', 8, 'EN', 9, 'P', 9, '6', 9);
%types = ('cGf2', 'ISBN', 'cGen', 'ISBN', 'fHmg', 'UPC', 'fGzX', 'UPC-E1');
while(<>) {
exit if $_ eq "\n";
if (!/^\.(.*)\.(....)\.(.*)\.$/) {
print "invalid code\n";
exit;
}
$id = $1;
$type = $2;
$code = $3;
$output = "";
while ($code =~ /^(..)(.?)(.?)(.*)/) {
$output = $output . $translation{$1};
$output = $output . $translation{$2};
$output = $output . $translation{$3};
$code = $4;
}
if ($types{$type} ne ""
print "$types{$type} ";
}
return ($output);
}
} #end sub
print "<P>output is: $output";
$co->end_html;
---end code---