On Tue, Nov 23, 2004 at 11:37:22AM -0500, Tom Lane wrote:
>
> > CREATE FUNCTION test1() RETURNS TEXT AS $$
> > return ["test"];
> > $$ LANGUAGE plperl;
>
> > SELECT test1();
> > test1
> > ------------------
> > ARRAY(0x8427a58)
> > (1 row)
>
> This is exactly what Perl will do if you try to coerce an array to a
> scalar:
>
> $ perl -e 'print ["test 1"], "\n"'
> ARRAY(0xa03ec28)
> $
To go a stage further, there's no array-to-scalar coercion happening
there; the [] syntax gives you a reference to an anonymous array, and
a reference to an array is a scalar, even when evaluated in list
context, as Tom's example is. If you wanted to return a list from
a sub in perl you'd just go return("test 1", "test 2").
> so I don't think a Perl programmer would find it surprising; if anything
> he'd probably complain if we *didn't* do that.
Indeed. It would be Perlish to have some magic so that when you called
one PL/Perl function from another you could return an array ref from
the inner one and have it Do What You Mean in the outer one, too.
Richard