Add a perform! method that validates and raises error, calls perform if all is hunky-dory