perlquestion
Monolith-0
<P>I'm trying to pass two hashes to a subroutine, but it seems I cannot do that..</P>
<SMALL>Here's some of the code I'm working with:
<HR>
<CODE>
sub register {
my (%error, %FORM) = @_; ### <- note this line
my $CGI = new CGI;
my $template = HTML::Template->new(
filename => 'register.tmpl',
path => $cfg{'template_path'} );
$template->param(
ERROR => $error{'any'},
ERROR_NAME => $error{'name'},
USERNAME => $FORM{'username'},
ERROR_NAME_TAKEN => $error{'name_taken'},
ERROR_PASS => $error{'pass'},
ERROR_PASS2 => $error{'pass2'},
ERROR_EMAIL => $error{'email'},
EMAIL => $FORM{'email'} );
print $CGI->header;
print $template->output;
# temp debug stuff
print "..";
print $FORM{'username'};
print $error{'name'};
}
sub register_submit {
# Get the stuff submitted from the form
read(STDIN, my $buffer, $ENV{'CONTENT_LENGTH'});
# Split the name-value pairs
my @pairs = split(/&/, $buffer);
my %FORM;
foreach my $pair (@pairs) {
my ($name, $value) = split(/=/, $pair);
# Remove plus signs and decode %-encoding
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$FORM{$name} = $value;
}
# Check for errors in the data
my %error;
if (!$FORM{'username'}) { $error{'name'} = 1; $error{'any'} = 1; }
if (!$FORM{'password'}) { $error{'pass'} = 1; $error{'any'} = 1; }
if ($FORM{'password'} ne $FORM{'pass2'}) { $error{'pass2'} = 1; $error{'any'} = 1; }
if (!$FORM{'email'}) { $error{'email'} = 1; $error{'any'} = 1; }
if ($error{'any'}) {
®ister(%error,%FORM); ### <- note this line
}
else {
## Go on doing the stuff it's supposed to do
}
}
</CODE>
<HR>
<P>I have found that the subroutine 'register' gets the first hash alright, but it doesn't pick up the second one. I can see why this might not work, but my question is if there is any way I can get it to work. If not, then could I still get some suggestions on what I might do otherwise to achive the desired effect?</P>
<P ALIGN="Right">- Monolith</P>