Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^2: Inline::C hash access

by fireartist (Chaplain)
on Sep 04, 2008 at 13:35 UTC ( #709015=note: print w/replies, xml ) Need Help??


in reply to Re: Inline::C hash access
in thread Inline::C hash access

Thanks for this!

I initially tried renaming the c function to "form", which is the real name I'm using - but got an error about a previous declaration of Perl_form, so it looks like the functions are being put in a global namespace - however that's not a real problem - I just named it back to "root", then added a *form = \&root and it worked fine.

I found while trying to run my test suite, that the if( SvOK(sv) && SvTYPE(sv) == SVt_RV ) { } check was failing sometimes - I'm not sure why, so I'll have to investigate further. However, if I comment-out that check, all tests pass ok.

Running my usual profiling script shows the Inline::C version only runs about 2-3% faster (for total script runtime) - however, I think I'll be able to modify your code to replace a few other often-used methods - so hopefully, eventually, I'll be able to significantly speed up my program. - Thanks once again!

Replies are listed 'Best First'.
Re^3: Inline::C hash access
by dave_the_m (Monsignor) on Sep 04, 2008 at 15:14 UTC
    if( SvOK(sv) && SvTYPE(sv) == SVt_RV )
    That's not what you want - the SvTYPE just says what the SV's body physically consists of, and says nothing about whether it currently contains a valid RV. For example, if you do  $x = "foo"; $x = \$y; then the SvTYPE of $x is actually SVt_PV. You probably want:
    if (SvROK(sv)) ...

    Dave.

Re^3: Inline::C hash access
by jettero (Monsignor) on Sep 04, 2008 at 14:50 UTC
    This does seem to be covered in the pod (Inline::C), "If you use C function names that happen to be used internally by Perl, you will get a load error at run time. There is currently no functionality to prevent this or to warn you. For now, a list of Perl's internal symbols is packaged in the Inline module distribution under the filename 'symbols.perl'. Avoid using these in your code."

    Based on that, I'd say there's no work around other than what you did.

    -Paul

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://709015]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (4)
As of 2021-01-22 04:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?