Thread: BUG #2136: plperl doesn't work, plperlu - yes

BUG #2136: plperl doesn't work, plperlu - yes

From
"Robert Osowiecki"
Date:
The following bug has been logged online:

Bug reference:      2136
Logged by:          Robert Osowiecki
Email address:      robson@cavern.pl
PostgreSQL version: 8.1.1
Operating system:   Linux  2.6.14-gentoo-r5 #2 SMP Thu Dec 22 11:58:01 CET
2005 i686 Intel(R) Xeon(TM) CPU 3.20GHz GenuineIntel GNU/Linux
Description:        plperl doesn't work, plperlu - yes
Details:

Creation of any plperl function gives error message:

ERROR:  creation of Perl function failed: Can't locate object method "new"
via package "Safe" at line 1.
        (in cleanup) Can't call method "reval" on an undefined value at line
1.

The same function created in plperlu language compiles and works fine.

I've recompiled Postgres to be sure about library versions.

Perl version: v5.8.6 built for i686-linux
ldd output:
#ldd /opt/pgsql/lib/plperl.so
        linux-gate.so.1 =>  (0xffffe000)
        libperl.so.1 => /usr/lib/perl5/5.8.6/i686-linux/CORE/libperl.so.1
(0xb7e6f000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7e19000)
        libnsl.so.1 => /lib/libnsl.so.1 (0xb7e04000)
        libdl.so.2 => /lib/libdl.so.2 (0xb7e00000)
        libm.so.6 => /lib/libm.so.6 (0xb7ddd000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7daf000)
        libutil.so.1 => /lib/libutil.so.1 (0xb7daa000)
        libc.so.6 => /lib/libc.so.6 (0xb7c92000)
        /lib/ld-linux.so.2 (0x80000000)

Re: BUG #2136: plperl doesn't work, plperlu - yes

From
Michael Fuhr
Date:
On Fri, Dec 30, 2005 at 09:43:52AM +0000, Robert Osowiecki wrote:
> Creation of any plperl function gives error message:
>
> ERROR:  creation of Perl function failed: Can't locate object method "new"
> via package "Safe" at line 1.
>         (in cleanup) Can't call method "reval" on an undefined value at line
> 1.

Can you use the Safe module in standalone Perl scripts?  What happens
if you run the following?

#!/usr/bin/perl
use strict;
require Safe;
print "Safe::VERSION = $Safe::VERSION\n";
my $foo = new Safe('foo');
print "test = ", $foo->reval("test"), "\n";

--
Michael Fuhr