http://qs1969.pair.com?node_id=519722

jithoosin has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks,

I just want to know that is their any limit on the size of variable being passed to perl from C if using perlembed. I have this doubt because the perl stack is being used for the variable being passed .

My requirement is to pass any html file from C file to perl file.I use  XPUSHs(sv_2mortal(newSVpv(htmlFileBuffer,0)));
When i use 0 in the "newSVpv " will perl calculate the size of the variable ,what ever it may be?

Replies are listed 'Best First'.
Re: perlembed - limit on size of variable being passed to perl from C (heap)
by tye (Sage) on Dec 29, 2005 at 07:19 UTC

    The Perl stack will hold the pointer to (the pointer to...) the large buffer just fine. If malloc() won't choke, then Perl shouldn't either.

    - tye        

Re: perlembed - limit on size of variable being passed to perl from C
by Madcap Laughs (Acolyte) on Dec 31, 2005 at 10:08 UTC
    When you use 0 as the second arg to newSVpv(), the variable is deemed to finish at the first NULL character (\0). Therefore if htmlFileBuffer contains one or more embedded NULLs (which I would think is unlikely) you won't get what you want. In that case you would need to specify the actual size as the second arg to newSVpv().

    Here's a little demo Inline::C script:
    use warnings; use Inline C => Config => BUILD_NOISY => 1; use Inline C => <<'EOC'; SV * foo(char * sv) { return newSVpv(sv, 0); } SV * foo2(char * sv, int len) { return newSVpv(sv, len); } EOC $x = 'hello' . "\0" . 'world'; print $x, " ", length($x), "\n"; $y = foo($x); print $y, " ", length($y), "\n"; $z = foo2($x, length($x)); print $z, " ", length($z), "\n";
    It prints:
    hello world 11
    hello 5
    hello world 11

    Cheers,
    Rob