in reply to Mason and $@

$@ can be changed by any intermediate steps which happen to cause it to change. I can't think it's out of the question that some part of the component resolution code is using an eval which is succeeding and thus clearing it out. Like $1 or $!, unless you can absolutely count on other code not doing something to change it your best bet's copying it (either explicitly or through stringifying it).