Halak turned aside all 12 shots he faced in the opening frame and finished with 18 stops for the Blues, who ended a two-game skid.
Perron's goal midway through the third snapped a 1-1 tie and was enough to lift St. Louis to the victory.
Chris Stewart got the Blues' other goal.
Matt Calvert tallied and Sergei Bobrovsky stopped 21-of-23 shots for the Blue Jackets, who were playing without injured center Artem Anisimov.
NBC reportedly holds celebs hostage to Jimmy Fallon's show
Boston schools pull out free condoms over wrapping complaints