On Tue, Nov 4, 2008 at 12:39, Tom Lane <[EMAIL PROTECTED]> wrote: > "Alex Hunsaker" <[EMAIL PROTECTED]> writes: >> Hrm works for me if I take out the elog from sort() > > Even more interesting, this variant *doesn't* work: > > regression=# create or replace function trustedsort() > returns int > as $$ > my @arr = qw(5 4 3 2 1); > my @sorted = sort { "$a" <=> "$b" } @arr; > elog(NOTICE, join(' ', @sorted)); > return 1; > $$ > language 'plperl'; > CREATE FUNCTION > regression=# select trustedsort(); > NOTICE: 5 4 3 2 1 > trustedsort > ------------- > 1 > (1 row) > > Seems like it's the interpolation into a string that is failing.
It has something to do with anon subs not sure what... see below test case This works: require Safe; my $safe = Safe->new('PLPerl'); $safe->permit_only(':default'); $safe->permit(qw(sort)); $safe->share(qw(&j)); sub j { print "j called ". (shift) . "\n"; } my $f = $safe->reval(<<'z'); sub blah { my @c = sort { j("$a $b"); $a <=> $b } qw(5 4 3 2 1); j(join(" ", @c)); return; } blah(); z $ perl tsafe.pl j called 5 4 j called 3 2 j called 4 2 j called 4 3 j called 2 1 j called 1 2 3 4 5 This fails: (which is what we do in plperl.c) my $f = $safe->reval(<<'z'); sub { my @c = sort { j("$a $b"); $a <=> $b } qw(5 4 3 2 1); j(join(" ", @c)); return; } z $f->(); $ perl tsafe.pl j called j called j called j called j called j called j called j called j called 5 4 3 2 1 This works: $safe->reval(<<'z'); my @c = sort { j("$a $b"); $a <=> $b } qw(5 4 3 2 1); j(join(" ", @c)); return; z $ perl tsafe.pl j called 5 4 j called 3 2 j called 4 2 j called 4 3 j called 2 1 j called 1 2 3 4 5 Dunno... -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs