in reply to context of printf ->wantarray

I think you're maybe working from a false premise there. printf does want an array, so when you call t() in that context it returns TRUE (i.e. 1). When you specify scalar, it doesn't want an array and returns FALSE (i.e. 0).

Take a look at the documentation for wantarray.

-- Ken