in reply to Trouble testing if on-the-fly generated checkboxes are checked

From CGI man page :

my @values = $q->multi_param('foo');
 
    -or-
 
my $value = $q->param('foo');
 
    -or-
 
my @values = $q->param('foo'); # list context, discouraged and will ra +ise # a warning (use ->multi_param instead)
Pass the param() method a single argument to fetch the value of the named parameter. If the parameter is multivalued (e.g. from multiple selections in a scrolling list), you can ask to receive an array. Otherwise the method will return a single value.
-----------------

Maybe your $form_data{"box$i$j"} contained an array (edit: it is not correct, it will contain the length of the array) as returned by param($sparam}) in list content, whereas the param("box$i$j") eq "string" was forced to return a scalar, i.e. a single string. If that's the case you have some more debugging to do.

In that case,

use strict; use warnings;

at the beginning of your program will be your friends.