Dilshan top-scored with 88, Jayawardene hit a fluent 55 and Perera made 59 as the hosts took advantage of England's wayward and indisciplined attack that produced 17 wides.
The start of the day-night match at the Premadasa stadium was delayed by an hour due to bad weather, but the umpires decided to play a full 50-overs-a-side game.
England's decision to field first in overcast conditions did not bear fruit as Dilshan and Perera put on 120 for the first wicket by the 23rd over to give the hosts a flying start.
England, who till then had failed to stem the flow of runs, struck again in the next over when Moeen Ali trapped Kumar Sangakkara leg-before for two. Sangakkara reviewed the decision after consulting non-striker Dilshan, but television replays favoured the bowler.
More From This Section
Dilshan missed his century when he tapped a slower ball from Chris Woakes back to the bowler in the 38th over, ending a 76-run stand for the third wicket with Jayawardene.
Sri Lanka were cruising at 253-3 in the 43rd over when off-spinner James Tredwell dismissed captain Angelo Mathews and Jayawardene with his last two deliveries in the innings.
Sri Lanka plundered 94 runs in the last 10 overs to set England a tough target at the start of the seven-match series which gives both teams a chance to prepare for the World Cup in February-March.