Mike Moustakas added two hits and an RBI for the Royals, who remained a half- game ahead of the Tigers for first place in the AL Central. Detroit beat the Indians earlier Monday.
Yordano Ventura (11-9) allowed three runs -- two earned -- on five hits with seven strikeouts and four walks over 6 1/3 innings for Kansas City, which snapped a three-game skid. The right-hander returned to the mound after missing his last start because of a back issue.
Michael Choice, Tomas Telis and Adrian Beltre each drove in a run for the Rangers, who had just five hits.
Texas starter Colby Lewis (9-12) gave up four runs on nine hits while striking out five over seven innings. The right-hander was coming off a complete game performance at Seattle last Wednesday, as he allowed four runs and seven hits in a 12-4 victory.
The Royals jumped out to a 1-0 lead in the first. Alex Gordon hit a two-out single, stole second and raced home on Perez's double to right-center field.
Gordon also scored on Perez's two-run homer in the third.
Kansas City took a 4-0 lead in the fourth after Moustakas' single plated Carlos Peguero, who had his contract selected from Triple-A Omaha prior to the game.
Texas finally got to Ventura in the sixth. Elvis Andrus doubled and Alex Rios walked. Following a wild pitch that advanced the runners one base, Andrus crossed the plate on Beltre's groundout.
The Rangers tacked on two more runs in the seventh. Adam Rosales doubled and raced home on Telis' single to left-center field. Two batters later, Choice hit an RBI single to cut the gap to 4-3. Kelvin Herrera came in from the bullpen and got Leonys Martin to ground into a double play.
Wade Davis pitched a perfect eighth and Greg Holland tossed a scoreless ninth for his 41st save of the season.
Lewis fell to 1-4 lifetime against the Royals ... Kansas City activated first baseman Eric Hosmer from the 15-day disabled list as rosters expanded on Monday.