function pp_structextract,strin,_ref_extra=ex,null=null
compile_opt idl2,logical_predicate
ret={}
tn=tag_names(strin)
pl=pp_locate(strupcase(ex))
exret=bytarr(n_elements(ex))
foreach t,tn,it do begin
if ~pl.haskey(t) then ret=create_struct(ret,t,strin.(it)) else begin
(scope_varfetch(t,level=0,/ref_extra))=strin.(it)
exret[pl[t]]=1B
endelse
endforeach
if keyword_set(null) then foreach eex,ex,iex do if ~exret[iex] then begin
(scope_varfetch(eex,level=0,/ref_extra))=!null
endif
return,ret
end