MINNEAPOLIS -- Scott Baker was not quite perfect, but close enough.

Baker, a 25-year-old right-hander, had only a slight blip in the fourth inning of the Twins' 3-1 victory over the Royals on Monday night at the Metrodome.

The Royals managed just two hits and their four-game winning streak ended in front of 23,628 fans.

Baker went eight innings and faced just 25 batters, one over the fewest possible. Closer Joe Nathan plugged in a 1-2-3 ninth, and between them the two pitchers were confronted by just 28 batters. That's one over the minimum.

The Royals knew Baker was a Scrooge with bases on balls. When it comes to walks, he squeezes them like pennies. In 79 1/3 innings this season, Baker has issued just 13 unintentional walks.

"He was around the zone, and I don't think he walked anybody," said the Royals' Alex Gordon. "We knew he hadn't given any walks all year, so we were aggressive. It was our fault that we didn't jump on him."

Baker's 99 pitches resulted in no walks, seven strikeouts, just two hits and one run.

"I was throwing the fastball away, looking to move it out there, then bust 'em in," Baker said. "If it's working, don't fix it."

Why indeed.

He zipped through the first nine batters, then he encountered his only problem. David DeJesus led off the fourth with a double, and he scored on Mark Grudzielanek's single.

As Mark Teahen struck out, Grudzielanek stole second base. Then, as Billy Butler's pop fly was caught in short center field, Grudzielanek strayed from the base and was doubled up.

"Just a bad read, that's all I can say," Grudzielanek said. "I thought he had a little more muscle than that. It was my mistake."

Butler, standing nearby, overheard the muscle remark and smiled.

"Yeah," he said. "I went to the weight room after the game."

At any rate, after that, Baker pitched four more perfect innings -- 12 up, 12 down. Nathan took over and recorded his 23rd save.

Royals starter Gil Meche pitched well for seven innings, but he had early trouble.

For eight straight games, the Twins had gone hitless in the first inning. Not this time around.

Jason Tyner led off the first with a single. Jason Bartlett also singled. Joe Mauer -- bam -- doubled and the Twins led, 2-0.

"Mauer had a 1-2 count, and in that situation, I should have gone with my best pitch, which is a curveball," Meche said.

Instead, feeling like he had a lot of oomph coming into the game, Meche unleashed a fastball and got it up. Mauer, a left-handed batter, lashed it down the left-field line.

That was all, though. Meche walked Justin Morneau, but he got a nice double play started by Gordon. The right-hander then struck out Jason Kubel, but not before Kubel sent a scary, soaring, high drive over the right-field wall -- just foul.

"It's weird. This season when I give up runs in the first inning I usually take off and pitch a good game," Meche said.

True enough, he breezed along. He gave up four more hits but no more runs.

"They got to Gil early," manager Buddy Bell said. "He shut 'em down after that."

The Twins packed on their third run in the eighth against lefty Jimmy Gobble on Tyner's double and Mauer's single -- his third RBI.

The game consumed just 2 hours, 18 minutes, not much of it when the Royals were at bat. It's a rare thing, just sending 28 batters to the plate in a game. Wonder if the Royals realized their chances were that limited?

"Yeah, because I made the last out of the game," DeJesus said.

Yep, the 27th out by the 28th batter.