De : Shane Nay [mailto:[EMAIL PROTECTED]]
> To comment on what John originally said..., arg, here we go.  The
> difference between print \$somevariable, and print $somevariable can
> be very significant.

Nope.  Not "very".

> Everything is passed internally as a "reference", but that
> doesn't me it's done in the same way.  When you say "print $somevar",
> and "print \$somevar" two VERY different things happen. case 1:
> print $somevar  (I'm assuming a type of string)
> SV* somesv=(SV*)malloc(sizeof(SV));
> somesv->sv_any=(void*)malloc(sizeof(char*)*strlen(ourstring));
> //Notice, have to set aside memory
> strcpy((char*)somesv->sv_any,ourstring); //Notice we have to copy our data
> -->Call the "print function" and pass it a reference to "somesv"

I'm sorry, but I think you are simply wrong here.  If I call a perl
function or an XS routine with a variable as an argument it is passed by
reference.  There is *no* copy.

A simple proof:

        sub hack {
                $_[0] = 'a new string';
        }

        $a = 'an old string';
        hack $a;
        print $a;

This part of your pseudo code:

> SV* somesv=(SV*)malloc(sizeof(SV));
> somesv->sv_any=(void*)malloc(sizeof(char*)*strlen(ourstring));
> strcpy((char*)somesv->sv_any,ourstring); //Notice we have to copy our data

is *not* part of the call.  It's the code that puts a value in "somesv",
i.e.

        $somesv = "ourstring".

It is present in both the ref and the nonref cases.

Passing a refrence to $r->print is *slower*(by an infinitessimal amount).

The point of allowing it is to get around the problems with the normal
Perl coding style:

        sub slow {
                my $r = shift;
                my $arg = shift;       # A copy here!
                $r->print ($arg);
        }

But note the copy is not in the argument passing, it's in the Perl
code.

        sub fast_but_ugly {
                $_[0]->print ($_[1]);
        }

--
John Hughes <[EMAIL PROTECTED]>,
        CalvaEDI SA.                            Tel: +33-1-4313-3131
        66 rue du Moulin de la Pointe,          Fax: +33-1-4313-3139
        75013 PARIS.

Reply via email to