KANSAS CITY, Mo. -- Salvador Perez was a bit miffed when he showed up to the park on Thursday.

The Kansas City Royals' big, affable catcher had worked nine innings the previous night in a game that was delayed nearly three hours by rain and a lighting outage, so manager Ned Yost thought he would give Perez the afternoon off from behind the plate against the Cleveland Indians.

"There was no way he was going to play him today," Yost explained later, "but I told him to be ready, because you could have an impact on this game."

That proved to be quite the prediction.

Perez entered as a pinch-hitter in the eighth inning and delivered a bases-loaded double, sending the Royals to a 10-7 victory over the Indians on a sun-splashed afternoon.

"I just felt a little sad coming into the clubhouse and seeing the lineup," Perez said, "but I just had to be ready for the sixth inning, the seventh inning, whatever the case."

Lorenzo Cain hit his first career grand slam and George Kottaras followed with a solo shot in the sixth inning for the Royals, allowing them to rally from an early 5-0 deficit.

The Indians regained the lead on Carlos Santana's two-run double in the seventh, but the Royals answered again in the bottom half when Eric Hosmer cracked a two-run homer.

Indians reliever Bryan Shaw (0-2) walked Kottaras to lead off the eighth and then hit Johnny Giavotella. Shaw was lifted for Rich Hill, who promptly walked Jarrod Dyson to load the bases.

"We knew Perez was sitting over there ready to hit," Indians manager Terry Francona said.

He came through with the biggest hit of the day.

"We didn't get the job done the last two nights," said Indians reliever Joe Smith, who served up Hosmer's homer. "It leaves a sour taste in your mouth."

Luke Hochevar (2-1) worked a scoreless eighth inning for the Royals, and Greg Holland worked around a single in the ninth for his second straight save and his 19th on the season.

The Royals scored at least 10 runs for only the fourth time this year -- despite only six hits -- by taking advantage of eight walks and a costly hit batter by the Indians.

"In the sixth, seventh and eighth, we walked the leadoff hitter every inning," Francona said. "We just put ourselves in a tough position even though we scored seven runs."

Drew Stubbs homered and drove in four runs, and Michael Brantley had four hits and also drove in a run for Cleveland, which had won five straight and pulled into first place in the wide open AL Central before losing its last two games to the Royals in wild fashion.

Hosmer's go-ahead shot in the seventh on Wednesday night gave Kansas City a 6-5 victory.

"The character of this offense is we're not quitting," Hosmer said. "We told ourselves before, if we're going to make a run at this, these are big games to make up ground, facing the teams ahead of you in the division. We didn't want to let this opportunity slip away."

Things looked good for the Indians at the start on Thursday. They took a quick lead on Brantley's single in the first and then Stubbs made it 3-0 with his homer in the second.

James Shields put the Indians' leadoff batter on base for the fourth time before Santana singled in the sixth. Aviles added a one-out single and Lonnie Chisenhall walked to load the bases for Stubbs, who delivered a two-run single that made it 5-0 and knocked Shields from the game.

The prize acquisition in a blockbuster trade with Tampa Bay, Shields went 29 consecutive starts of at least six innings before lasting five against the White Sox on June 23. His early ouster on Thursday made it fewer than six in two of his last three starts.

Ubaldo Jimenez had allowed just two hits and kept the Royals in check until the sixth inning, when he led it off by walking his fourth and fifth batters of the game. An error on Jimenez while trying to cover first loaded the bases with nobody out.

Cain came to the plate and hit a 3-2 pitch to center for his first career grand slam, and the second of the series by the Royals. Alex Gordon hit one in Tuesday night's opener.

Kottaras, getting the start at catcher for Perez, added his tying shot to right moments later. It was only his third of the season but the second time Kottaras has been involved in back-to-back home runs: He did it with Dyson on June 23 against the White Sox.

Jason Kipnis, who earlier extended his hitting streak to 15 games, drew a leadoff walk and Brantley singled off Gutierrez in the seventh before Santana's double made it 7-5.

Hosmer matched both runs in the bottom half with his seventh homer in his last 12 games.

That's how the game remained until Perez cleared the bases with his double in the eighth, the three RBI boosting the Royals to their seventh straight win in a game Shields has started.

"We've been doing a good job of coming back all year. We're real resilient," Shields said. "I'm proud of these guys. Hopefully we can get a little string of wins together."

Game notes

The Royals (24-19) began the day with the AL's second-best winning percentage on July 4. The Indians (88-73) had the fifth-best percentage. ... Royals RHP Wade Davis will start Friday against Oakland. Indians RHP Justin Masterson will take the mound against Detroit.