Josh Tomlin pitched seven stellar innings and Shin-Soo Choo, Michael Brantley and Travis Hafner homered, leading the Cleveland Indians to a 3-1 win over the Tampa Bay Rays on Thursday night.

Tomlin (5-5) limited the Rays to one run and two hits, easily the right-hander's best outing since April.

Choo led off the first with a homer off Jeremy Hellickson (4-5), Brantley connected in the second and Travis Hafner homered in the eighth off Jake McGee.

Vinnie Pestano worked the eighth and All-Star closer Chris Perez finished up for his 24th save — all in a row since blowing one on opening day.

The Rays have lost eight of 10, fell to 4-13 against the AL Central and have scored more than four runs once in the last 11 games.

Luke Scott went 0 for 3 and set the Rays' record by going 39 straight at-bats without a hit.

Hafner gave Cleveland a big insurance run in the eighth, connecting off McGee. It was only Hafner's second game back after missing a month following surgery on his right knee. His towering homer into the right-field seats was his seventh this season and first since May 23.

The Indians have been waiting for Tomlin to regain his consistency since missing three weeks with a wrist injury. He pounded the strike zone against Tampa Bay, throwing 58 strikes in his 88 pitches. He retired the side in order five times and got a big assist from Choo to end the sixth.

With two outs, Rays outfielder Ben Zobrist hit a drive to right that pushed Choo up to the wall before he made a staggering, backpedalling catch.

Scott exemplifies Tampa's offensive woes.

Manager Joe Maddon played Scott, the team's usual designated hitter, in the field for the first time this season, hoping a change of scenery would shake him out of his prolonged slump. However, Scott stayed hitless since June 1 by grounding out, fouling out and flying out to Choo before being lifted.

Scott broke the previous club record of 37 consecutive hitless at-bats held by Jose Cruz Jr. (2004), and he's closing on the major league record of 46 set last year by Eugenio Velez.

Choo was batting just .235 when manager Manny Acta moved him to the top of the order on May 14, and the outfielder has been on a hitting tear ever since. He's hitting .327 (64 of 196) with eight homers, 20 RBIs and 42 runs in 47 starts in the leadoff spot. He has raised his average 60 points to .295.

He led off the first with his ninth homer, and fourth in the No. 1 slot, driving a 2-0 pitch from Hellickson over the wall in right field.

Brantley made it 2-0 in the second with his third homer — and second in two days. With one out, Brantley turned on a fastball by Hellickson, sending just over the right-field wall.

The Rays closed within 2-1 in the fifth. With one out, Will Rhymes hit a ball to deep right that just missed leaving the field and caromed off the wall. By the time Choo ran it down, Rhymes was at third with a stand-up triple. Jose Molina followed with an RBI groundout.

Tampa Bay could have threatened in the eighth when Elliot Johnson lined a single into the left-field corner off Pestano with one out, but he was thrown out trying to stretch into a double it by left fielder Aaron Cunningham, who came in as defensive replacement for Johnny Damon an inning earlier.

NOTES: On Friday, the Indians will honor Hall of Famer Larry Doby by renaming a street near Progressive Field "Larry Doby Way" in honor of him breaking the AL's color barrier 65 years ago. ... The Rays have started a pitcher age 30 or younger in 979 consecutive games, a major league record. The last Tampa Bay pitcher over 30 was Mark Hendrickson, who was 32 when he started on June 25, 2006, against Atlanta. ... Rays OF Matt Joyce, out since June 20 with a strained left oblique, was eligible to come off the disabled list Thursday. Instead, he was sent home with a stiff back, the result of sliding during a rehab game. "It's nothing awful, but he's just not able to compete before the All-Star break," Maddon said. ... The Rays and Indians entered the game tied for the most walks in baseball, but Cleveland had five walks while Tampa Bay had none in Thursday night's game.