in reply to wierd CGI::Param() behaviour

Note that that first line is being interpreted sorta like this:
my $killdate = param( {"kdate"} ); # passing a hashref
If you had run Perl with the -w option (or 'use warnings' under 5.6) to run with warnings on, you would have seen that there was a problem here:
Odd number of elements in hash assignment at test line 9.
Always build your code to run under strict and warnings, or, at the very least, turn these on when you're debugging strange behavior. More often than not, they will point to your problem (or at least a symptom of it).