Kevin Shattenkirk also scored and Carter Hutton made 17 saves as the Blues improved to 12-1-4 at home.
Wayne Simmonds, Nick Cousins and Brayden Schenn scored for the Flyers, who dropped their fourth game in their last five. Steve Mason made 19 saves.
Perron deflected Colton Parayko’s shot to tie it 5:53 into the third, less than two minutes after Schenn had given the Flyers a 3-2 lead. Perron ran his goal-scoring streak to three games.
Upshall put the Blues ahead 80 seconds later with a deflection of Joel Edmundson’s shot. It was his first goal in 18 games.