For one thing, you want to learn about using the <code> tag when posting code or other stuff that should look like code.
For another thing, your "if" expressions are much more verbose than they should be. Assuming that "low_count_no" and "high_count_no" are supposed to refer to the values of the third and fourth columns in your data file (e.g. numeric values 0 and 3 respectively, for this line: "A1","D2CHILDB1T3","0","3","0T3") -- and assuming that you are parsing the file correctly when you load it into your data structure -- your logic would normally look like this:
if ($cals_info{$cals_type}{low_count_no} != $cals_info{$cals_type}{hig
+h_count_no}) {
print $cals_info{$cals_type}{$cals_state_0};
} else {
print $cals_info{$cals_type}{$cals_state_1};
}
Though for cases like this, I personally prefer to use the ternary operator:
print ($cals_info{$cals_type}{low_count_no} != $cals_info{$cals_type}{
+high_count_no}) ?
$cals_info{$cals_type}{$cals_state_0} :
$cals_info{$cals_type}{$cals_state_1};
But, as suggested in the earlier reply, the error report you're getting suggests that you are not parsing the data file correctly, and for at least the line that has "2EN" in it (if not other lines as well), one of those "count_no" elements is holding that last field, instead of the intended digit value.