Hi Keith,
I'll try to answer as best I can
Question 1) Yes, you both can and should pdsDelete $pds_snd after issuing the request.
Question 2) Yes, the returned PDS is still allocated memory (even if it was allocated by the library) and should be freed with pdsDelete.
Question 3) Yes, the two are definitely linked! Since new() creates a Perl object (which contains a reference to the PDS) it will be freed by the garbage collection in Perl when it goes out of scope. The DESTROY method will in fact call pdsDelete on the PDS, so you do not have to worry about that. From your code snippet I'm not really sure when it will go out of scope though... If you set loglevel to 2 you should see an entry for when the DESTROY method is called though...
If you are interested you could always take a look in the PDS.pm under <NIM_HOME>/perllib/Nimbus.It will show you what all the wrapper functions do
Cheers,
Stian