Trailing 2-0 entering the final period, the Oilers cut the deficit on Jordan Eberle's goal 3:41 into the period.
Alex Hemsky notched the equalizer less than 5 minutes later and Perron the Oilers ahead on a snap shot past Reto Berra midway through the period.
Perron later was credited with an empty-netter for Edmonton, which ended a five-game losing streak.
Devan Dubnyk stopped 33 shots to earn the win.
Sean Monahan and Dennis Wideman each scored for the Flames, who dropped a sixth straight.
Berra finished with 20 stops.