Apologies for the late reply. Had to investigate a little further on this one.
Apparently, it has something to do with the Maya node becoming "isDirty".
Using only the line below,
persp.LensFOV = `camera -q -hfv persp`;
does make it update by clicking the edit expression button again, or simply changing your current frame, but it doesn't directly connect it to the source, so the update doesn't occur in real time.
To make it happen in real time, your approach is correct, as the following pattern is needed to make the connection successful:
$variable = existing_attribute;
$variable = command;
new_attribute = $variable;
This way, the $variable has access to both nodes and connects them.
So, you are doing the right thing!
I'm sorry for the long and complicated explanation, but I believe it is something along these lines.
Hope it served as some kind of help!
André Moreira
Game Developer / Technical Artist
LinkedIn