Battling Walsall took the lead and then came back to equalise but Portsmouth held on with a late winner from Matt Taylor.
Brazilian striker Junior hit the Portsmouth bar with a free-kick in the second minute and Walsall deserved their lead on the half hour when Sonner converted a spot-kick after Steve Corica had been sent flying by Paul Ritchie.
Portsmouth had to wait until first-half injury time when Nigel Quashie scored with a low right-foot shot.
Portsmouth failed to showed their best form which has made them runaway First Division leaders, but they took the lead in the 57th minute when Svetoslav Todorov headed in his 11th of the season from a centre from the left by Paul Merson.
But Walsall refused to surrender and they equalised in the 66th minute, again with a Sonner penalty after he himself had been brought down by Jason Crowe.
Portsmouth went ahead in the 74th minute when Todorov set up an opportunity for Taylor to poke in from three yards at the third attempt.
Walsall were still not beaten and it needed an exceptional save in the 87th minute by Shaka Hislop to deny substitute Gary Birch.
In injury time Walsall were awarded a free-kick and Corica beat the wall and goalkeeper Hislop, but saw his effort go narrowly wide of the post and with it the chances of an equaliser.
Referee Grant Hegley booked six players and allowed a mass brawl in the second half to go unpunished as Portsmouth struggled to hold on to their narrow lead