ST. LOUIS -- Starlin Castro and Marlon Byrd had key hits as the Chicago Cubs broke up Jake Westbrook's perfect game with a four-run sixth inning and held off the St. Louis Cardinals 6-3 Sunday night to avoid a three-game sweep.
Lance Berkman's three-run homer in the bottom of the sixth made it interesting for the Cardinals, who completed a disappointing 4-3 homestand against the two worst teams in the NL Central. They trail the first-place Brewers by 2½ games heading into a three-game series in Milwaukee on Monday.
Alfonso Soriano homered for the second straight game and Ryan Dempster (8-8) pitched effectively for the Cubs, who snapped a five-game losing streak and beat the Cardinals for only the second in seven meetings this season.
Soriano homered off Kyle McClellan, moved to the bullpen after the Cardinals acquired Edwin Jackson last week.
Newly acquired Cardinals shortstop Rafael Furcal got a standing ovation before grounding into a forceout as a pinch-hitter in the seventh, a move that prompted the Cubs to lift Dempster. Ryan Theriot, who lost his starting job, had been 6 for 7 in the series before Sean Marshall induced an inning-ending double play with runners on first and third.
Westbrook (9-5) needed only 44 pitches to get through five innings, then labored through 33 pitches in the sixth and left trailing by four. After he retired his first 16 batters, five straight Cubs reached safely with two outs, and Westbrook was done after Chicago batted around.
Westbrook had been 2-0 with a 2.37 ERA in his first three starts after the All-Star break.
Castro's RBI double over center fielder Jon Jay's head put the Cubs ahead. Carlos Pena drew a bases-loaded walk before Byrd finished the rally with a two-run single. Soriano, who hit a three-run homer in the first on Saturday, added a two-run drive for his 17th.
After managing just two hits off Dempster over the first five innings, the Cardinals climbed right back into it in the sixth on Berkman's league-leading 28th homer to straightaway center.
Carlos Marmol worked the ninth for his 20th save in 27 chances.
Eighth-place hitter Koyie Hill walked on a full count with one out in the sixth for the Cubs' first baserunner. Dempster's two-strike sacrifice bunt gave them their first runner in scoring position and Reed Johnson's sharp single to right with two outs ended the no-hit bid and put runners at the corners.
Daniel Descalso started at shortstop instead of Furcal, fatigued after a day of travel, plus just 6 for 38 for his career against Dempster, and made two exceptional plays early. Descalso robbed Johnson to start the fourth on a grounder that deflected off third baseman David Freese's glove, then snared Soriano's grounder up the middle and made a strong throw to first from the grass to end the fifth.
Notes: The crowd of 43,960 was the Cardinals' fifth sellout of the season. ... Albert Pujols doubled in the sixth and is 17 for 52 (.327) against Dempster with seven homers, 14 RBIs, 11 walks and one strikeout. ... The Cardinals have grounded into a major league-high 116 double plays, two in each of the last two games. ... The Cubs are 16-29 against the NL Central.