If you also don't like to do too many eval's, there's also : eval join "",map { eval "$1 += \$_" if "\$x \$y \$z" =~ m/(\S+)/g } f(); or, with an extra sprintf : eval(sprintf("\$x+=%f;\$y+=%f;\$z+=%f;",f())); Etienne ==== Want to unsubscribe from Fun With Perl? Well, if you insist... ==== Send email to <fwp-request@technofile.org> with message _body_ ==== unsubscribe