True grit: Perry rallies past McKinley