in reply to update a running script

Is there a best way of having a script check to see if a new version of itself exists and updating it while running?

Yes, update a module :)

use App::Fantastic; App::Fantastics->version_check_if_enabled; App::Fantastics->run;

Is there a better way? Are there any pitfalls I might encounter?

:) Other than its annoying to be prompted for updates when you're trying to do stuff, offline?

I imagine there could be a race condition, or dns hijacking if you're not https-ing or something else :)