I... have been unable to abstract out iwpt_dcr_list and iwpt_dcr_value... Is it possible to do?
Yes. Matter of fact, TS already does it for you. It's different though than the usage of closures (if closures are what you used before).
Consider the following example. Let's say in your PT you have:my @pt_foo = iwpt_dcr_list('pointer.moo'); Formally, 'pointer.moo' is an access string, nothing more. In the PT namespace however $pointer either already exists or can be created as a blessed object of TeamSite:CRnode type.So, in your pm you may have something like the following providing $pointer was passed:my @pm_foo = $passed_pointer->get_node_list('moo');iwpt_dcr_value('something.name') corresponds to $something->value('name'), etc...
Btw, what was the error manifestation when you tried to use closures for iwpt_dcr_****? I never tried that.Whatever it was, perhaps the fact that access string does not mean much outside of PT contributed to it
In the compilation you get the closures:sub { iwpt_dcr_value() } , sub { iwpt_dcr_list() }parsed into:sub { (eval TeamSite:CRparser:erl_name())} , sub { (eval TeamSite:CRparser::dcr_list_perl_name() ) }When you do your call of:$dcr_value_pointer->("dcr.Metaname.metatitle"); gives an 'unde' result when printed out as does$dcr_list_pointer->("dcr");