Why use exceptions instead of carped errors?
Because it is safer, cleaner, and matches the object-oriented idea better. ยง One real (costly) example of why using $@ message strings to trap exceptions is a bad idea is Indigo Star’s perl2exe tool and the aging use base pragma. Indigo Star, for some ignorant reason, inserts “LOOK IN THE HELP FOR HOW TO AVOID THIS” message into the beginning of $@ when a package can’t be found completely oblivious to common cases where more than one package is defined in a single module file.