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.
Video of Victoria’s Secret models trying to 'twerk' hits Instagram
Megyn Kelly: Santa Claus and Jesus are both white men