Yussuf Poulsen's smart finish gave Denmark an undeserved opening victory at the World Cup as Christian Cueva's penalty miss came back to haunt him in Peru's first World Cup match for 36 years.
The big team news was the absence of Peru captain Paolo Guerrero, the country's all-time top scorer whose drugs ban was temporarily lifted just weeks before the tournament. Jefferson Farfan led the line in his place. Tottenham's Christian Eriksen was one of four England-based players in the Denmark starting XI.
Peru recorded the first shot on target of the match with Yoshimar Yotun's well-struck hit from range, but Kasper Schmeichel got everything behind it. The Incas weren't afraid to try their luck from distance and a strong shot from Watford's Andre Carillo was beaten away by Schmeichel.
Denmark looked rattled by their opponents' dynamic approach but started to grow into the game after 20 minutes. Thomas Delaney unleashed their first shot of note but it flew safely over Pedro Gallese's crossbar.
The clearest chance so far saw Carillo release Farfan and only a brilliant last-ditch tackle from Simon Kjaer prevented him from giving Peru the lead. Denmark suffered a setback as William Kvist was carried off on a stretcher holding his ribs and replaced by Lasse Schone.
Gallese was then tested for the first time as an Eriksen free kick bounced off the wall and back to Schone, whose effort was spilled and then reclaimed by the Peruvian goalkeeper. Controversy followed as Cueva was fouled in the box, but referee Bakary Gassama was unmoved.
However, about 10 seconds later he stopped the play to review the incident on his sideline VAR monitor, before pointing to the spot. Cueva stepped up to give Peru the lead but blazed his penalty over the crossbar. It was a hard pill to take and Cueva was consoled by his teammates as the half time whistle went.
Cueva got in behind with the first chance of the second half but was too greedy in his efforts to make amends for the penalty miss, and when he eventually squared it the chance was spurned by Flores, though a late offside flag meant it wouldn't have counted anyway.
Peru were left to rue their profligacy in front of goal as Denmark scored against the run of play. It was a nice counter-attack, with Eriksen timing his pass to Poulsen to perfection, and the RB Leipzig man finished nicely past Gallese.
The Incas almost responded immediately as Farfan went through on goal but Schmeichel was again equal to his effort. The dejected Peru fans were given a reason to cheer as Guerrero was brought on for Flores. His first chance was a firm header on target, but once again it was too close to Schmeichel.
Peru's dominance was continuing unabated despite the goal but Alberto Rodriguez's header across the face of goal did not get the touch it needed to equalise. Luis Advincula got in behind the Danish defence but hit his shot straight at Schmeichel when a cross would have been better.
Guerrero nearly scored a brilliant equaliser with a quickly improvised backheel shot which rolled just wide of the post with Schmeichel scrambling. Another great run from Carillo left Danish defenders trailing in his wake and his cutback for Farfan couldn't have been better, but a combination of goalkeeper and defender stopped it on the line.
Eriksen had another chance to wrap it up for Denmark but Gallese foiled him. Instead Denmark were made to sweat until the end but they held on well as Peru's bold approach came to nothing, and the Danes are already big favourites to join France in the last 16.