in reply to Spot the bug!

I see your point but I disagree with your conclusion:
The moral seems to me to be: don't call a function that uses eval and expect the value of $@ to be preserved. Using @_ inside the eval causes no issues that I can see.