Rubel Hossain, Shakib Al Hasan and Arafat Sunny claimed two wickets each to leave Sri Lanka tottering on 67-8 in the 22nd over after the hosts won the toss and chose to field in the day-night match in Dhaka.
Perera and Sachithra Senanayake ensured Sri Lanka did not fall below 147, their lowest one-day total against Bangladesh, by adding 82 runs for the ninth wicket.
Perera, who helped Sri Lanka record last-ball wins over Bangladesh in two Twenty20 matches last week, hit six sixes and four boundaries in a superb rearguard action.
The match was reduced to 43-overs-a side from the stipulated 50 due to a wet outfield at the Sher-e-Bangla stadium, which had been drenched by persistent rain over the last two days.
Also Read
Seamer Rubel Hossain began Sri Lanka's downfall by removing both openers, Tillakaratne Dilshan and Kusal Perera, off successive deliveries spread over his second and third overs.
Batting mainstay Kumar Sangakkara was caught at mid-off trying to loft seamer Al-Amin Hossain out of the ground to make it 43-3 in the 11th over.
The second and third matches will be played at the same venue on Thursday and Saturday.
Sri Lanka won both the preceding Test and Twenty20 series.