Bangladesh, trailing by a huge 498-run margin on first innings, were bowled out for 250 in their second knock after lunch on the fourth day at the Sher-e-Bangla stadium.
Perera, a 31-year-old playing in his second Test, finished with five for 109 while seamer Suranga Lakmal took three as the hosts were dismissed in 51.5 overs with a day to spare.
Bangladesh, who resumed the day at 35-1, failed to cope with Sri Lanka's pace and spin assault and lost their last nine wickets for 215 runs despite the even-paced pitch.
Rubel made 17, while Al Amin returned unbeaten on a quickfire 32 off 18 balls that contained four sixes and one boundary.
More From This Section
Bangladesh, who made 232 in their first innings, conceded their highest Test total of 730-6 declared. Three Sri Lankans hit centuries including Mahela Jayawardene, who scored an unbeaten double-ton.
Sri Lanka have now won 14 of their 15 Tests against Bangladesh, eight of them by an innings margin, and drawn the other.
Bangladesh, who languish at the bottom of the Test rankings at number 10 -- lower than unfancied Zimbabwe -- have lost 68 of their 82 Tests since gaining full status in 2000.
They have won four Tests, two each against Zimbabwe and the West Indies.