Failure to store $@ immediately causes wrong diagnostics to be printed

Passing $@ to loc() causes its value to not be examined until later,
when it is substituted into the string.  Between the ->require error and
then, the loc() machinery attempts to run for the first time, which
_also_ requires files, thus overwriting the original error in $@.

Store the error found in $@ away into a different variable, to ensure
that it is not lost before it is used.  Passing "$@" instead of $@ would
similarly suffice, but the clarity of the extra variable is preferrable.

Fixes I#22991.
Merge branch '4.2/crontool-module-load' into 4.2-trunk