Gibson allowed one run in seven innings, Brian Dozier and Josmil Pinto homered, and the Minnesota Twins held on to beat the Seattle Mariners 5-4.
Dozier and Trevor Plouffe each hit RBI doubles in the third inning against Chris Young (3-1) to give the Twins an early lead on their way to their fifth win in their last six home games.
Gibson (4-3) hadn't earned a victory since winning his first three starts this season. He struck out four and recorded 13 groundball outs to lower his ERA to 4.20.
"It's always good to be on the winning side of a game," said Gibson, who only lasted two innings and allowed six runs in his last start against Detroit. "A lot of groundballs tonight. Good to see that again."
Robinson Cano reached base for the 24th consecutive game and broke the Mariners' 21-inning scoreless drought with an RBI double in the fifth.
Ron Gardenhire left Gibson in to face Cano in the seventh with runners on first and third and two outs, a spot where the Twins manager might have turned to his bullpen last season.
"I thought he was throwing the ball really well," Gardenhire said. "I wasn't worried at all. I thought that was his ballgame at that point."
Dustin Ackley's triple made it 5-3 in the eighth. Mike Zunino followed with a sacrifice fly that made it 5-4, but the rally ended when reliever Casey Fien struck out James Jones looking.
Eduardo Escobar's RBI single that made it 5-1 in the sixth proved to be the game-winner.
"I wish I would've kept it to three and we would've won the game, but I just wasn't as sharp as I needed to be, and the ball didn't have as much life as I needed it to have," Young said. "I dug the guys too big a hole, but they gave it a fight and tried to come back."
Perkins, who blew his second save Thursday, stranded Michael Saunders at third after a leadoff single in the ninth. Corey Hart popped out and Perkins made a nice play coming off the mound to throw out Justin Smoak at first for his 11th save.
What did Perkins throw Hart to get him to pop out?
"A hanging slider," Perkins said with a grin. "Same thing I threw to Smoak. That's just the luck of the draw. Yesterday I didn't have any luck and today I threw a lot worse pitches than I did yesterday and I got two outs out of it. That's baseball."
Young came into the game 3-0 with a 1.83 ERA in his last three starts, but was cooled off by a Twins lineup that has totaled at least 10 hits in five straight games.
The 6-foot-10 right-hander allowed five runs on 10 hits including a season-high seven extra base hits in seven innings.
Seattle's 21 scoreless innings streak tied a season high set April 12-14 and was nine innings shy of the club record.
Hart was still thinking about the hanging slider from Perkins after the game.
"I saw a slider up, something that I could at least hit up in the air," Hart said. "I just got under it. It's one of those situations you want to be in and it's tough when you don't get it done."
The Twins have now won 4,224 games in Minnesota, one more than when the franchise was in Washington.
Five of Minnesota's last six wins have been by one run.
"Another exciting baseball game," Gardenhire said. "Guys come out swinging, and we kind of had to hang on there a little bit."
NOTES: Twins OF Sam Fuld said he felt better after having a setback Wednesday in his recovery from a concussion sustained two weeks ago. ... Injured Mariners lefty James Paxton (strained back) will throw two innings in a simulated game and right-hander Taijuan Walker (sore shoulder) will throw 45 pitches in a bullpen session on Saturday. ... Left-hander Roenis Elias (3-2, 3.69) makes his ninth major league start for the Mariners on Saturday afternoon. He will face Samuel Deduno (0-2, 3.64), who is making his third start since joining the rotation after Mike Pelfrey went on the DL with a groin strain. ... Pelfrey made his first rehab start for Triple-A Rochester on Friday and allowed one earned run in five innings. ... Injured Twins OF Josh Willingham (hand) was 0 for 4 in his first rehab start in Rochester.