in reply to Ternary operator can't be used as first argument of push

You can do it this way

push @{ $_ & 1 ? \@a : \@b }, $_ for 1 .. 10; print "@a\n@b"; 1 3 5 7 9 2 4 6 8 10

And the reason

print prototype( 'CORE::push' ); \@@

Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
Hooray!