Interesting puzzle, and I'm not sure how you work
japhy's
solution, though it does seem interesting.
Here's my take, which ended up being a variation on
Sprad's
even though it started out differently:
sub p
{
# 68 characters
my@s;for(@_){@s=(/^\D$/?(eval"$s[1]$_$s[0]",@s[2..$#s]):($_,@s))};@s
}
print p(@ARGV);