in reply to Undestanding this code snippet
You can always catch errors from open like this:
open HANDLE, ... or die "Can't open: $!"; [download]
Note that $@ is only for errors from eval.