Opener Salman Butt made a strokeful 74 and Bazid Khan scored a sedate 51 as Pak reached their target of 211 with 33 balls to spare to take a 4-0 lead in the five-match series.
Earlier, all-rounder Shakib Al Hasan hit a fighting century to rescue Bangla after they had slumped to 45 for five after winning the toss on a good batting track.
Gul and Sohail returned with three wickets haul while comeback man Mohd Asif plucked two wickets.
Butt, who has now scored 315 runs in the series, notched his seventh one-day half century in Pakistan's reply.
He and Kamran Akmal (36) put on a brisk 97 for the opening wicket stand. Wicketkeeper Akmal belted six fours and a six before being caught at long off by Mortaza off Shakib.
Butt was dropped on 16 and later narrowly escaped being run out following a direct hit by Abdur Razzak.
Bazid, who batted steadily for his second one-day half century, was caught at mid-off by Shahadat Hossain off Razzak.
Mohammad Yousuf remained unbeaten on 37 and Fawad Alam was five not out when Pakistan clinched victory.
Earlier, left-hander Shakib Al Hasan notched up a workmanlike hundred to help Bangla reach a decent 210.
The 21-year-old scored 108 for his second one-day hundred and shared a Bangladesh record ninth wicket stand of 97 with Mashrafe Mortaza (38) to revive the tourists, who were reeling at 109/8 after they won the toss and batted.
In all, he faced 120 balls before holing out in the last over to paceman Sohail Khan, who finished with 3/30.
The previous best ninth wicket stand for Bangladesh in one-day cricket was 62 between Khaled Mashud and Mohammad Rafique against the West Indies at St. Lucia four years ago.
Mortaza, who hit just one boundary during his 67-ball knock, was out at long-on in the 48th over.
Hasan, who came in when Bangla was reeling on 10/3, also added 37 for the sixth wicket with Farhad Reza (14) after paceman Umar Gul rocked the tourists.
Gul's incisive opening spell of 3/25 left Bangladesh struggling at 16/4 in the sixth over.
Hasan however batted with resolve, holding one end to ensure Bangladesh would surpass their lowest ever one-day total of 87, made against Pakistan at Dhaka in 2000.
Bangladesh were off to a disastrous start, losing opener Junaid Siddique (nought) to Gul off the fifth ball of the second over and then Aftab Ahmed fell for a duck in the bowler's next over. In his next over Gul sent Ashraful packing.
Fellow opener Tamim Iqbal failed to curb his aggressive tendency when he drove Asif straight into the fielder placed at cover.
Asif, who returned after a five-month lay-off due to an elbow injury, finished with 2/35.