Your tr (the program) example does, indeed, get rid of non-whitespace. The Perl program, howver, does not. What it does is: take all characters but some whitespace (those with ASCII codings 32, 9, 13, 10, in order), changing them with themselves, and returning how many have been (non) changed.
The /c option complements the first list of tr///, while leaving the second list empty makes it equal to the first (in this case, the complemented first). tr/// in any case returns the number of characters interested by the transliteration.
dakkar - Mobilis in mobile
Most of my code is tested...