The game was a makeup from a scheduled May 2 contest that was called because of snowy conditions. Temperatures during the game Monday were in the 90s.
The Royals, who snapped a seven-game losing streak, piled up four runs in the third inning and five more in the sixth to make the outcome a rout.
Perez had a sacrifice fly and a three-run home run while Butler singled in runs in the first and third innings and had a solo home run in the eighth and Moustakas added to rallies in the third and sixth innings with run-scoring hits.
Kansas City battered Tampa Bay starter Jeremy Hellickson (10-8) for five runs, seven hits and two walks in 2 2/3 innings.
Jeremy Guthrie (13-10) benefited from the offensive outburst and collected the win with a five-inning outing in which he gave up six hits and three walks but only one run.
Butler's first-inning single scored Alex Gordon and put the Royals ahead. Butler drove in the first run in the third before Moustakas doubled in another and Perez hit a fly that scored Butler. Justin Maxwell's RBI single got Moustakas home for a 5-0 Kansas City lead.
James Looney drove in Matt Joyce in the fourth for Tampa Bay but Gordon tripled in a run and scored on a Moustakas base hit ahead of the three-run homer by Perez that made the score 10-1 in the sixth.
Butler hit a towering drive into the Royals' bullpen in the eighth to complete the scoring.