Verlander (10-7) had not lost to the Royals since Sept. 9, 2009, but gave up six runs, five earned, on eight hits and four walks in 5 2-3 innings. It was the seventh time in 21 starts that Verlander failed to make it into the sixth inning.
Perez drove in a run in the first with a sacrifice fly and stroked a two-run double in the third.
Jeremy Guthrie (9-7) picked up the victory, surrendering five runs on 10 hits and two walks in six innings.
Greg Holland worked the ninth to collect his 24th save in 26 chances.