I don't write a lot of CGI programs, so I'm not going to be an authority on use of the param() function -- but it may be complicating that line more than necessary. I'm guessing that you call it on these two fields at least twice - once (here) to see if its empty, and again later to use it.
You may want to take that out of the question by assigning each to a scalar value. Then this works:
my $tele = '';
my $mobile = '';
# uncomment to pass
# $tele = 'hello';
if( length($tele) || length($mobile) ){
print 'At least one is OK';
}
else {
print 'both are empty';
}