in reply to split questions

I wouldn't try to store all the fields in individual scalars, but store them in an array like
@fields = split /,/, $response, 39;
Also, on a style-note, calling the fields $_r1, $_r2 etc doesn't really convey a lot of information about what the fields are (then again, maybe your real code does use names like
($date,$time,$type...) = ...
)
You can use the following to name the fields in the array
use constant DATE => 0; use constant TIME => 1; use constant TYPE => 2; ... my @fields = split /,/, $response, 39; if ($fields[TYPE] eq 'widget') ...
You could also use a hash -
my @fields = qw(date time type ...); my %response; @response{@fields} = split /,/, $response, 39; # hash slice if ($response{type} eq 'widget') {...