unless isn't a looping construct, it's a branching/control construct, but that's not important, what is important is the scoping of the $errorcount variable (see Coping with scoping as usual). You need to define the variable in the containing scope of the unlesses and the if.
If you declare the variable once within each block you will be accessing a different variable in the block. If you want to access the same variable it must be declared at a containing scope so that it is visible (a containing lexical scope if you're using lexicals, and a containing dynamic scope if you're using package globals, which you shouldn't be for something like this)
--
integral, resident of freenode's #perl