From Colombo, and educated at Isipathana College.
At domestic level, he played for seven different teams in a career spanning from December 1995 to October 2009, though most of his matches came for the Colombo-based Sinhalese Sports Club. After retiring, he emigrated to Australia.
Perera made his first-class debut in December 1995, aged 17, playing two matches for the Sinhalese Sports Club in the Saravanamuttu Trophy. During the 1997–98 season, he played nine first-class matches, taking 29 wickets at an average of 19.03, and also debuted for Sri Lanka A.
At domestic level, Perera recorded his highest first-class score, 78 runs, against the Moors Sports Club during the 2000–01 season. His best bowling figures, 7/73, had come against Northamptonshire, when Sri Lanka A toured during the 1999 English season. Perera left Sinhalese at the end of the 2002–03 season, and subsequently played for Colombo CC during the 2003–04 and 2004–05 seasons, Badureliya SC during the 2005–06 season, and Moors during the 2007–08, 2008–09, and 2009–10 seasons, as well as for two Twenty20 teams, Wayamba and Kandurata, in 2008 and 2009, respectively. His last match at a major level came in October 2009, for Moors against Ragama CC in the Premier Limited Overs Tournament.
Perera made his ODI debut in the 1998 Singer-Akai Nidahas Trophy, and played two matches against India and one against New Zealand. He made his Test debut on Sri Lanka's 1998 tour of England, scoring 43 not out batting ninth in Sri Lanka's first innings and taking the wicket of Alec Stewart. In his innings, he recorded six boundaries (including one six) as he "eviscerated an England attack containing Darren Gough, Angus Fraser, and Dominic Cork". Later in the year, Perera represented Sri Lanka in the cricket competition at the 1998 Commonwealth Games, with the team losing the play-off for the bronze medal to New Zealand.
Perera was restricted by stress fractures in his back for several seasons, but returned to international level in the 2001 Coca-Cola Cup, a triangular tournament featuring India and New Zealand. He played in all seven of Sri Lanka's matches at the tournament, and was named man of the match in the second game. In this match, against India, he scored 28 runs in a 49-run eighth-wicket partnership with Kumar Dharmasena (26), and then took the first two wickets to fall in India's innings. Perera played two further matches for Sri Lanka when India stayed on in the country to play a three-Test series. Known for his "sideways-on whippy action", after the first Test, he was reported for a suspect action by umpire Steve Bucknor. Perera had also been reported during a previous domestic season, by Asoka de Silva. He resumed playing in December 2001 after remodelling his action and having it cleared by Sri Lanka Cricket.
The second game against India was Perera's last Test match, with two ODIs during the 2001 LG Abans Triangular Series his last matches at international level.
Perera moved to Perth, Western Australia, in the late 2000s, with his wife, who had been raised in the city. When not playing cricket, he had worked as a bank teller in Sri Lanka, and he worked as a waiter and forklift driver in Australia before starting his own sporting goods business. As of the 2013–14 season, he was the captain of the Bassendean Cricket Club, playing in a local Perth competition.