Peru inledde matchen piggt där man hade ett par chanser att ta ledningen. Bland annat tvingades Kasper Schmeichel till en räddning i den 13:e minuten efter ett skott från straffområdesgränsen.
I den första halvleken tvingades Danmark till ett byte då William Kvist gick av med en skada. In kom i stället Lasse Schöne.
Strax innan halvtidsvilan fick Peru en chans att ta ledningen på straff efter att Yussuf Poulsen fällt Christian Cueva - ett beslut som kom efter att situationen hade VAR-granskats. Cueva tog själv hand om straffen, men sköt högt över.
- Det är inte ens nära mål, säger kommentator Jesper Hussfelt i TV4:s sändning.
Cueva lämnade planen i tårar i halvtid och tröstades av flera av sina lagkamrater.
I stället var det Danmark som tog ledningen i den andra halvleken när Yussuf Poulsen avslutade ett snabbt anfall med att sätta bollen i mål till 1-0.
Minuten senare hade Peru en bra kvitteringschans, men Schmeichel stod för en vass räddning.
Peru bytte in stjärnan Paolo Guerrero, som inte startade matchen, i sin jakt på kvittering, men lyckades inte få hål på Kasper Schmeichel och danskarna vann med 1-0.
- Det här var vår femte match utan att släppa in nåt mål. Det är ett starkt facit och Kasper (Schmeichel) var fantastisk i målet i dag, säger Danmarks förbundskapten Åge Hareide till Fifa.
Segern gör att Danmark tillsammans med Frankrike står på tre poäng i grupp C efter den första omgången, då fransmännen tidigare i dag besegrade Australien med 2-1. I nästa match möter Danmark Australien medan Peru ställs mot Frankrike.
Se höjdpunkterna från matchen i spelaren ovan.
Startelvor:
Peru: Gallese, Rodriguez, Trauco, Cueva, Farfan, Tapia, Ramos, Advincula, Carrillo, Yotun, Flores.
Danmark: Schmeichel, Kjaer, Christensen, Kvist, Delaney, Jörgensen, Eriksen, Dalsgaard, Stryger, Poulsen, Sisto.