Rival openers Mahela Jayawardene and Mohammad Hafeez top-scored with 42 on each side in this semi-final, but it was Rangana Herath and Ajantha Mendis who gave Sri Lanka the edge with five wickets between them after the hosts had posted 139 for four.
Sri Lanka's sixless innings was a curious affair, albeit on a slow and low surface - but Pakistan's run chase ran out of steam against Angelo Mathews and the spinners.
Jayawardene played especially well, as he almost always does, after choosing to bat first. The captain dominated a first-wicket stand of 63 with Tillekeratne Dilshan, reverse-sweeping expertly against spin and timing and placing his seven boundaries.
But he chipped a catch to short fine-leg off Shahid Afridi, and then Kumar Sangakkara made all except three runs in a stand of 24 until he was caught at long-on off Hafeez. Umar Gul thought he had struck in the 18th over, Jeevan Mendis lbw to a yorker, only to discover he had overstepped. But two balls later, Gul got Dilshan in near identical fashion - the opener having taken 43 deliveries over his 35.
Thisara Perera and Mathews muscled 16 off Gul's final over, to give Sri Lanka a little breathing space for which they would be mighty thankful later. Pakistan's reply might have been minus Imran Nazir for a duck, had Dilshan somehow clung on to a very tough diving chance at point off Mathews.
Instead, the first breakthrough did not come until there was 31 on the board when Nazir contrived to edge a forward-defensive at Ajantha Mendis on to his stumps - via pad and ground - in the spinner's first over.
Hafeez also escaped an early half-chance, when Herath could not hold a diving effort at long-on off Perera - nothing to the let-off the Pakistan captain would get on 24 when Lasith Malinga put down a straightforward one in the same position off Mathews. The same bowler had already struck twice in four balls, however, when Jayawardene brought him back for the 10th over.
Nasir Jamshed went lbw to one that might have pitched just outside leg; then Kamran Akmal gave himself little chance to adapt to the awkward surface and somehow propelled an attempted big hit only as far as midwicket where Jayawardene himself took an easy catch. Shoaib Malik was bowled by one that spun sharply from Herath (three for 25).
But it was the dismissal of Hafeez, stumped on the charge to the slow left-armer, which turned the match Sri Lanka's way - and when the out-of-form Afridi was then bowled first ball, Pakistan were 91 for six. They still had time to be competitive but were running out of the right men to find the boundaries, and in the end it was too much for Umar Akmal to do on his own.