P.J. Fleck could have used the same words to describe the outcome of the Gophers' game Friday night against Purdue that he used in answering whether the coronavirus threatened to cancel it altogether.

"It was close," the Gophers coach said.

His team held on to a 34-31 victory at TCF Bank Stadium, improving its record to 2-3 in this delayed and shortened Big Ten season. The down-to-the-wire result doesn't look impressive on paper, but the fact that the Gophers did it missing 20-plus players and three coaches from a combination of injuries and positive COVID-19 tests makes it a little more remarkable. That's basically the number of players it would take to field a complete offense and defense.

Some notable names were missing, including starting cornerback Benjamin St-Juste, starting rush end Boye Mafe and starting kicker Michael Lantz. Offensive line coach Brian Callahan also tested positive this past week and has been at home, where he will isolate for 10 days. Two other unnamed coaching staff members also tested positive, per an athletics department release. Players who test positive must sit out 21 days, per conference policy.

A Gophers spokesman confirmed pregame the Gophers were missing 20 players. The Big Ten Network said it was 22. Fleck said of 85 total scholarship players, he had 61 available.

Per Big Ten policy, the Gophers did not meet the threshold to cancel a game, which would mean a total test positivity rate through the past seven days of daily testing of greater than 5%, and a total team positivity rate — from 100-plus coaches and staff members — of greater than 7.5%.

The Gophers do not say how many positive tests are on the team nor do they identify players, though Fleck has intimated certain absences have been because of COVID-19, including in reference to the early-season special-teams depth issues. St-Juste tested positive ahead of last week's loss to Iowa.

Defensive coordinator Joe Rossi also tested positive and sat out the Illinois game earlier this season.

"Our whole mentality was, 'It's out of our control,' " quarterback Tanner Morgan said. "If we can go out there and play with 11 guys, we'll go out there and play with 11 guys. It doesn't matter."

BOXSCORE: Gophers 34, Purdue 31

Even with all those moving parts, the Gophers looked greatly improved — on offense at least.

In the first four games, the Gophers offense seemed stalled. Morgan had as many touchdown passes (four) as interceptions. New offensive coordinator Mike Sanford Jr. struggled with play-calling. And every opponent knew the only playmakers to focus on defending were receiver Rashod Bateman and running back Mohamed Ibrahim.

On the Gophers' first drive, none of those looked like issues. They drove 69 yards in eight plays in a little more than four minutes. Ibrahim, the Big Ten's leading rusher by a mile, still took most of the carries. But Sanford mixed in catches from tight end Bryce Witham, receiver Chris Autman-Bell and receiver Daniel Jackson, capped with running back Cam Wiley's 6-yard touchdown.

For a team that couldn't seem to balance or spread its offense in the past four games, the Purdue matchup saw a dramatic shift. Five players took carries, including running back Bryce Williams, wildcat quarterback Seth Green and even walk-on running back Preston Jelen. Seven players caught a Morgan pass, including Bateman, Green, Williams and tight end Jake Paulson.

Morgan ended the game going 15-for-22 for 264 yards. Ibrahim led the rushing attack with 102 yards on 25 carries with three touchdowns, and Autman-Bell led the receivers with five receptions for 129 yards.

There were also plenty of explosive plays, another conspicuous absence before this game. Ibrahim had a 17-yard run. Five pass-catchers had double-digit gains, including a 42-yard catch by Autman-Bell and a 39-yarder from Bateman.

The Gophers defense and special teams, though, were still a bit shaky, though each came up with plays that made a difference. Micah Dew-Treadway blocked a 27-yard field goal attempt to end the first half, preserving the Gophers' 21-10 lead heading into the locker room.

The defense struggled to contain receivers Rondale Moore and David Bell even with backup quarterback Jack Plummer starting in Aidan O'Connell's place. It allowed Purdue 492 total yards and 7.2 yards per play, close to the Gophers' season average that has them second-to-last in the nation.

But the defense did get a game-saving interception from Josh Aune, even if debatable officiating calls against Purdue set up Plummer's final ill-fated toss.

"This win isn't going to go down as one of the greatest games in Gophers history," Fleck said, adding he told his players after the game, "I'll never forget this day. I'll never forget this game because of what it meant, what it represented, how they won it with all the adversity."