Re: pl/perl and recent perl versions - failing to load internal modules

From: Toby Corkindale <toby(dot)corkindale(at)strategicdata(dot)com(dot)au>
To: Alex Hunsaker <badalex(at)gmail(dot)com>
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: pl/perl and recent perl versions - failing to load internal modules
Date: 2014-07-02 00:39:45
Message-ID: 803873567.323113.1404261585034.JavaMail.zimbra@strategicdata.com.au
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi Alex,
your example (chr(0x100) =~ /\\xa9/) works on my instance (pg 9.3.4, plperl 5.18)
However the following code fails:
=> do $$ "\N{U+263A}" =~ /[[:punct:]]/$$ language plperl;
ERROR: Unable to load utf8.pm into plperl at line 1.
BEGIN failed--compilation aborted.
CONTEXT: PL/Perl anonymous code block

Oddly, even if I add utf8 to plperl.oninit, I then get an error about being unable to load the 're' (regex) module. I don't understand how the example you gave does manage to work!

----- Original Message -----
> From: "Alex Hunsaker" <badalex(at)gmail(dot)com>
> To: "Toby Corkindale" <toby(dot)corkindale(at)strategicdata(dot)com(dot)au>
> Cc: "pgsql-general" <pgsql-general(at)postgresql(dot)org>
> Sent: Wednesday, 2 July, 2014 9:28:52 AM
> Subject: Re: [GENERAL] pl/perl and recent perl versions - failing to load internal modules
>
> On Mon, Jun 30, 2014 at 7:47 PM, Toby Corkindale
> <toby(dot)corkindale(at)strategicdata(dot)com(dot)au> wrote:
> > Hi,
> > I've been trying out PostgreSQL 9.3 with pl/perl built against Ubuntu 14.04
> > LTS' Perl 5.18
> > (Sourced from apt.postgresql.org)
> >
> > Maybe I'm doing something wrong, but it appears that plperl has become
> > completely useless, as it can't load any new modules, but modern Perl
> > versions have refactored the language into lots of small modules that are
> > automatically loaded as required. Except they can't be loaded as required.
> >
> > For instance, a fairly simple regex will try to load the modules: utf8,
> > utf8_heavy & re
> > Since it is forbidden from loading anything, it will fail.
>
> pl/perl should be preloading those modules via "my $a=chr(0x100);
> return $a =~ /\\xa9/i". Do you have some example pl/perl code that is
> broke? It seems to work for me (I only have 5.20 installed, on this
> machine, but I've used 5.18 on 9.2 and 9.3):
>
> $ perl -v
>
> This is perl 5, version 20, subversion 0 (v5.20.0) built for
> x86_64-linux-thread-multi
> ...
>
> $ psql ...
> baroque=> select version();
> version
> ─────────────────────────────────────────────────────────────────────────────────────────────────────────
> PostgreSQL 9.3.4 on x86_64-unknown-linux-gnu, compiled by gcc (GCC)
> 4.9.0 20140604 (prerelease), 64-bit
> (1 row)
>
> Time: 1.033 ms
>
> baroque=> do $$my $a=chr(0x100); return $a =~ /\\xa9/i$$ language plperl;
> DO
> Time: 1.161 ms
>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message john gale 2014-07-02 00:42:31 what specifically does vacuum have to scan / why does it need to rescan the same indexes many, many times
Previous Message Toby Corkindale 2014-07-02 00:36:44 Re: pl/perl and recent perl versions - failing to load internal modules