After a tight first half, Iceland went close to taking the lead late in the first half, though the already qualified Croats held firm through to the break.
And it paid off when midfielder Milan Badelj sprinted into the area unmarked to volley past goalkeeper Hannes Halldorsson in the 57th minute after a poor clearance by the Iceland back line.
Iceland defender Sverrir Ingason nearly leveled it twice just moments later, heading just over and then again off the crossbar.
Everton’s Gylfi Sigurdsson levelled in the 76th minute after Liverpool’s Dejan Lovren handled the ball in the area.
However, a 90th minute winner from Perisic saw Iceland crumble. Croatia will face Denmark in the round of 16.