Lewis Hamilton extended his lead in the driver's championship after a commanding drive to win the Portuguese Grand Prix from Max Verstappen and Valtteri Bottas.
With warm temperatures and strong headwinds returning for Sunday's race after having a major effect on qualifying, the race looked set to be a tricky affair for the twenty drivers.
At the start, Bottas got a clean getaway from Hamilton and Verstappen, with Perez swamped and subsequently lost fourth to Carlos Sainz Jr, who got a rocket start to jump the Mexican.
Lando Norris went into wheel combat with Esteban Ocon on lap one with the pair duelling for sixth place, with Norris winning the battle after going around the outside of the Frenchman into turn 11 to take the position.
Kimi Raikkonen's day came to an early end on lap two after the Alfa Romeo team leader hit the left rear wheel of teammate Antonio Giovinazzi on the main straight, deranging the front wing and beaching the Alfa Romeo in the turn one gravel trap with the safety car coming out in the process to retrieve the debris on the front straight.
At the restart, Bottas backed up the field as long as he was allowed to and got the jump on Hamilton, who lost second to Verstappen into turn one after the Dutchman went around the outside to take the position, further back Sainz had a dreadful restart losing fourth to Perez and then fifth to Norris, with the Brit overtaking the Mexican into turn five to move himself up to fourth.
Hamilton retook second place three laps later after a mistake in the final sector saw the Brit pounce on Verstappen on the main straight for an easy overtake into turn one.
Perez got past Norris back into fourth on lap 15 after the Mexican's Red Bull went straight past the McLaren on the main straight to move back into fourth spot, as the Brit began to struggle with his tyres.
Daniel Ricciardo continued his charge from sixteenth on the grid as the Australian moved up to tenth on lap eighteen after getting the assistance of DRS to go past Sebastian Vettel into turn one.
Hamilton finally snatched the lead on lap 20 after going for a brave move around the outside of Bottas into turn one despite the Finn's tough defending.
First, to come into the pits for their scheduled stop was Sainz, who switched from the soft to the medium tires, with the Spaniard rejoining the action in fifteenth behind George Russell.
A lap later saw Norris and Ocon make their pitstops, with Norris going to the medium tires and Ocon the hards as the Brit got out in front of Sainz whilst Ocon came out behind Nicholas Latifi, who had yet to make his stop.
Pierre Gasly stopped next with the Alpha Tauri mechanics getting their lead driver out in front of Ocon in eleventh place and behind Charles Leclerc, who remained stuck behind Sainz in tenth.
Ocon finally got past Gasly on lap thirty-five, with the Frenchman going around the outside into turn one to move up to eleventh place.
Red Bull gambled on lap 35 and brought Verstappen in from third place for fresh hard tires, with the Dutchman rejoining the track in fourth behind Perez.
Mercedes followed suit a lap later, with Bottas brought in a lap later for hard tires with the Finn jumping Verstappen out of the pits before losing third place after the Dutchman swept past into turn five as the Finn struggled with cold tires.
Hamilton pitted on lap 37 to hand the lead to the yet to stop Perez as the World Champion switched to hards for the second stint of the race, with Hamilton rejoining the track in second.
Leclerc finally got past Sainz for eighth, as the Monegasque bounced into turn five to take the position off the hard-charging Spaniard.
Ricciardo's charge to fifth came to an end as he pitted for a set of hard tires, but the Australian's stop was slow after he had failed to hit his marks perfectly, dropping him down to tenth.
Ocon continued his charge up the order on lap 45 after passing Sainz for seventh place into turn one.
Up at the front, Perez faced traffic issues, with the Mexican was held up by Nikita Mazepin into turn three, much to the Mexican's disgust as he attempted to push his set of medium tires until lap 56.
Ricciardo finally got past Gasly on lap 49 after the Australian pulled the switch back to overtake Gasly. Fernando Alonso also passed the Frenchman to put the second Alpine into the points.
Perez's gallant drive at the front of the field came to an end after Hamilton finally got past the Mexican on lap 51 on the front straight to regain the race lead.
Alonso then surged past Ricciardo for ninth a lap later, with the Spaniard going around the outside of the McLaren into turn one.
Mazepin's blocking of Perez saw him receive the wrath of the stewards as the Russian received a five-second penalty for the incident.
Alonso's excellent afternoon continued to get better as he breezed past Sainz for eighth on the front straight as the Ferrari driver continued to struggle with his ageing tires.
Ricciardo moved back up to ninth with two laps to go as he breezed past Sainz on the main straight, with Sainz being knocked out of the points altogether on the final lap courtesy of Gasly slipstreaming past on the main straight.
Mercedes pitted Bottas for the final push to try and snatch the fastest lap of the race off Perez, with Red Bull responding by pitting Verstappen from second place with one lap to go.
However, nobody could catch Hamilton, who took the 97th win of his Grand Prix career ahead of Verstappen, and Bottas, who inherited the fastest lap of the race after Verstappen's time, was deleted for track limits with Perez, with Norris and Leclerc rounding off the top six.
Ocon led home Alonso in seventh, whilst Ricciardo and Gasly filled the final points-paying positions.
Sainz was 11th ahead of Giovinazzi and Vettel, with Lance Stroll and Yuki Tsunoda having challenging races to finish 14th and 15th.
George Russell finished 16th and one lap down, with Mick Schumacher finishing 17th ahead of Nicholas Latifi and Mazepin, who was the last to finish.