or download this
If "do" cannot read the file, it returns undef and sets $! to
the error. If "do" can read the file but cannot compile it, it
returns undef and sets an error message in $@. If the file is
successfully compiled, "do" returns the value of the last
expression evaluated.