How can I tell if a variable is tainted?

See Laundering and Detecting Tainted Data. Here's an example (which doesn't use any system calls, because the kill is given no processes to signal):

    sub is_tainted {
	return ! eval { join('',@_), kill 0; 1; };
    }

This is not -w clean, however.