Aoki singled home Lorenzo Cain in the 14th inning to lift the Royals to a 2-1 victory over Cleveland after Indians starter Corey Kluber carried a perfect game into the seventh inning on Thursday night.

Cain opened the 14th with an infield single and stole second before Aoki delivered the winning hit off John Axford on a full-count pitch with one out.

"I was just trying to stay aggressive," Aoki said. "It wasn't like I was trying to go the other way or anything like that. I was just looking for a pitch to hit, and if I got that pitch, swing hard."

Aoki was mobbed by his teammates at second base.

"It was one of the best feelings, and hopefully we have more of those moments the rest of the season," he said.

Aaron Crow (5-1), the seventh Kansas City pitcher, earned the victory -- striking out the side in a perfect 14th.

Left-hander Marc Rzepcynski (0-3), who gave up the hit to Cain, took the loss.

Kluber held the Royals to two hits, retiring the first 19 batters he faced before Omar Infante, who was in a 0-for-16 skid, lined a single to center with one out in the seventh.

"I think it's hard to rate one performance against another," Kluber said. "I got in a good groove, and when they got a runner on we were able to catch him stealing."

Mike Moustakas doubled and scored on a throwing error by left fielder Ryan Raburn in the eighth inning to give the Royals a 1-0 lead. Moustakas hit a fly ball down the left-field line that Raburn nearly caught.

When Raburn tracked down the ball in foul territory, he spiked a throw that rolled into center field.

"How about that," Moustakas said. "I got a 2-0 fastball that I popped up to left, and Raburn tried to make a good play on it and it ended up hitting off his arm or shoulder.

"I just saw him drop it. I was headed to second. I saw him try to throw the ball in, and I just started running to third base. When I saw the ball kind of floating in left field and doing what I can to get over to third, and Jirsch (third base coach Mike Jirschele) waved me in."

Raburn was miffed about how the play unfolded.

"It was a freak play," he said. "I was trying to hold up. I saw our infielders going toward third, and I tried to hold up. I couldn't and of course the ball rolls halfway to center field."

The Indians tied it in the ninth off Greg Holland, who blew his second save in 28 chances. Holland walked Carlos Santana leading off the inning, and pinch-hitter Chris Dickerson bunted him to second. Yan Gomes' two-out single to center scored Santana.

"It was one of those rare occasions when I didn't have command," Holland said. "I threw 12 balls and nine strikes. You never want to walk the leadoff hitter in the ninth inning."

After Infante's hit, Kluber got out of the inning when Alex Gordon struck out, and Infante was thrown out trying to steal second.

Kluber, who allowed only one unearned run in nine innings, struck out 10 and walked none.

"I wish we'd had some runs so we could sit back and really enjoy it, because that was special," Indians manager Terry Francona said of Kluber's performance. "You can use all the adjectives you want. He had dominating stuff."

Royals starter Danny Duffy, who was 1-5 in his previous six starts, gave up two singles -- both to Santana -- in seven scoreless innings. Duffy, who also walked two, was pulled after 108 pitches.

Duffy lowered his earned run average to 2.47. He is the only American League pitcher with a losing record with an ERA less than three.

Wade Davis, who replaced Duffy, pitched out of a bases loaded jam in the eighth. With one out, he permitted singles to Jose Ramirez and pinch-hitter David Murphy sandwiched around a walk to Jason Kipnis. Davis then got Michael Brantley to ground into an inning-ending double play.

NOTES: The Royals sent Jimmy Paredes, who was designated for assignment on July 16, to the Orioles for cash considerations. Paredes appeared in nine games with Kansas City, going 2-for-10. He hit .305 with Triple-A Omaha. ... Indians SS Asdrubal Cabrera wasn't in the lineup for the third consecutive game because of back spasms. ... Royals 1B Eric Hosmer was held out of the lineup for the third time in four games with a right hand bruise. He entered in the ninth inning as a defensive replacement. ... Aoki was the DH for the first time in his career. ... The Indians plan to recall RHP Zach McAllister from Triple-A Columbus, where he is 5-0 with a 2.23 ERA in six starts, and start him Saturday against the Royals.