There was no happy return to Tynecastle for Craig Levein, with his St Johnstone side going down to their first defeat since he became manager.
When the dust settles, the new Perth boss will take plenty of positives from a good overall performance but old club Hearts secured the Premiership points.
A Lawrence Shankland goal just after the hour mark settled this contest and, frustratingly, came at a time when Saints were gaining control.
Hearts made a very fast start and by the time seven minutes were on the clock Dimitar Mitov had produced two superb diving saves to prevent an early opener for the hosts.
The first was low to his right when Alex Cochrane attempted to put the finishing touch to a flowing move.
And the second was low to his left after Liam Boyce got a downward header goal-bound at the back post from a corner.
Saints grew into the game as the first half progressed, though.
Luke Robinson forced a fine reflex block out of Zander Clark from close range and Chris Kane teed up Matt Smith for a shot from just inside the box that beat the former Perth goalie but ended up in the side-netting.
Clark again had to be alert just after the start of the second half when he got his hand to a Smith cross that turned into a shot heading for the top corner.
Then on 56 minutes he kept out a Max Kucheriavyi long-range effort.
Just as the game had reached a spell of relative Saints control, Hearts got themselves in front.
Cochrane delivered a good ball from the left and Liam Boyce’s first-time shot took a touch off Shankland to help it past Mitov at his near post.
The nearest Saints came to an equaliser was when Dara Costelloe narrowly failed to get his head to a Stevie May cross.
St Johnstone – Mitov 6.5, Considine 6 (Gallacher, 45), McGowan 7, Gordon 7, May 6.5 (Jaiyesimi, 86), Kane 6 (Jephcott, 82) , Kucheriavyi 6.5, Robinson 7.5, Smith 7, Phillips 7, Costelloe 6.5. Subs not used – Richards, Olufunwa, Sprangler, Ballantyne, Turner-Cooke, Franczak.
Saints’ star man – Luke Robinson. The on-loan defender was excellent at left wing-back in the first half and did a good job replacing the injured Andy Considine in the back three in the second period.