in reply to Logical Operation - Numeric vs String

You are using strings like "10.02.2000" as if they were numbers, so perl obligingly converts as much as it can to a number, "10.02.2000", becoming 10.02, and warns you that part of the string didn't look like part of the number.

You could do a string match instead:

if ($sw_fields[2] =~ /^$ver\./) # does it start with $ver and .?
but its hard to check for major version >= 10 that way. Depending on what all you are doing, spliting up the version is probably better:
my ($major, $minor, $subminor) = split /\./, $sw_fields[2]; if ($major >= 10)