Lakmal returned career-best ODI figures of 4-13 to help dismiss India for just 112, with Sri Lanka achieving the target in 20.4 overs and taking a 1-0 lead in the three-match series.
The visitors lost two early wickets in their chase before opening batsman Upul Tharanga made a 46-ball 49 to help his team end a 12-match losing streak.
“First of all we have to give 200 percent credit to our bowlers. They were disciplined, and bowled the right length and the right areas,” Perera said.
“This is an unplayable wicket. We didn’t expect that. We expected 250-260, but after that Suranga and Angelo (Mathews) bowled very well.
“At the moment, (Lakmal) is our first fast bowler. He’s done very well in the Test series as well,” Perera said of Lakmal, who took eight wickets in the three Tests against India.
Tharanga, who lost his limited-overs captaincy to Perera ahead of the series, was denied his fifty by Hardik Pandya who had the left-handed batsman caught at first slip.
Angelo Mathews, 25 not out, and Niroshan Dickwella, on 26, then steered their team home for a win savoured by the visitors after losing the Test series 1-0 last week.
“I have to mention that Upul gave a good start and he’s one of our best openers,” Perera said of Tharanga, who had opted out of his team’s Twenty20 match in Lahore and was subsequently removed as captain last month.
Pace spearhead Lakmal set up victory for the islanders after Perera won the toss and elected to bowl first at the picturesque ground overlooking the Himalayas.
The lanky paceman rattled the Indian batting during his extended spell of 10 overs as India collapsed to 29-7 before Mahendra Singh Dhoni fought back with a gritty 65 to take the total past 100.
With India in danger of being bowled out for an historic low — Zimbabwe’s 35 in 2004 versus Sri Lanka is the all-time record — Dhoni put on a crucial 41-run partnership with Kuldeep Yadav for the eighth wicket.
The pair took India past 54, their own lowest total, which was set against Sri Lanka in 2000.
Dhoni hit 10 fours and two sixes in his 87-ball stay, getting his 67th ODI half-century before he was finally dismissed by Perera to wrap up the Indian innings.
It was a horror start for skipper Rohit Sharma, named captain in place of the absent Virat Kohli who is officially resting ahead of the South Africa tour.
Mathews — who returned to bowl after recovering from a calf injury — drew first blood, trapping Indian opener Shikhar Dhawan for nought in the second over of the innings.
Lakmal soon got Sharma caught behind for two as the Indian top-order found it hard to counter the bounce and swing at the Himachal Pradesh Cricket Association Stadium.
“Today was not the ideal day for all our batters. It was an eye-opener. Hopefully we can regroup and come back in the next two matches,” said Sharma.
“Not such a great experience (to lead for the first time), because we lost, but we’ve got to forget what happened,” he added.
The action now moves to the second ODI in Mohali on Wednesday.