in reply to why does push not default to $_?

My first guess would be that push is paired with pop. You might very well want to say, for example, pop @foo; without putting what was popped anywhere. If push() took $_ by default, one might expect pop() to assign to $_ by default. Logical pairs that don't both deal with the same implicit variable should probably neither one do so.