Like choroba says it should work, but,
What webserver are you using (mapache moo.A.1245?? ) What CGI.pm are you using?
Hehehe, CGI.pm, never ceases to confuse :) delete this stuff from your program
### use CGI qw(:standard); ## REMOVE MYSTERY CODE
### use CGI 'param'; ## REMOVE MYSTERY CODE
Then try this program in your browser and see what you get
#!/usr/bin/perl --
use strict;
use warnings;
use CGI;
my $store = CGI->new;
my $cell = $store->param('cell');
my $target_dir = $store->param('target_dir');
print $store->header;
print $store->escapeHTML( $cell );
print '<hr>';
print $store->escapeHTML( $target_dir );
print '<hr>';
DebugCGI( $store);
exit 0;
sub DebugCGI {
my( $cgi ) = @_;
$cgi ||= CGI->new;
binmode STDOUT, ':encoding(UTF-8)';
$cgi->charset( 'UTF-8' );
print $cgi->header( -charset => 'UTF-8' );
print $cgi->start_html,
$cgi->b( rand time, ' ', scalar gmtime ),
'<table border="1" width="%100"><tr><td>',
$cgi->Dump,
'</td>',
'<td><div style="white-space: pre-wrap; overflow: scroll;">',
$cgi->escapeHTML( DD( $cgi ) ),
'</div></td></tr></table>',
CGI->new( \%ENV )->Dump,
$cgi->end_html;
} ## end sub DebugCGI
sub DD {
require Data::Dumper;
return scalar Data::Dumper->new( \@_ )->Indent( 1 )->Useqq( 1 )->D
+ump;
} ## end sub DD
__END__
Take special note of the value of QUERY_STRING