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.
Yosemite climber falls 30 feet, suffers major injuries
Turkey considering to use pistachios to heat country’s first eco-city