Skip site navigation (1) Skip section navigation (2)

suggested warning about perl nested named subroutines

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: "Patches (PostgreSQL)" <pgsql-patches(at)postgresql(dot)org>
Subject: suggested warning about perl nested named subroutines
Date: 2005-10-12 00:40:21
Message-ID: 434C5B75.7030108@dunslane.net (view raw or flat)
Thread:
Lists: pgsql-patches
I propose to add the following to the plperl docs, following recent 
problems.

comments?

cheers

andrew


Index: plperl.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/plperl.sgml,v
retrieving revision 2.45
diff -c -r2.45 plperl.sgml
*** plperl.sgml 24 Aug 2005 19:16:49 -0000      2.45
--- plperl.sgml 12 Oct 2005 00:36:33 -0000
***************
*** 53,64 ****
      # PL/Perl function body
  $$ LANGUAGE plperl;
  </programlisting>
!    The body of the function is ordinary Perl code. A PL/Perl function must
     always return a scalar value.  You can return more complex structures
     (arrays, records, and sets) by returning a reference, as discussed 
below.
     Never return a list.
    </para>
 
     <para>
      The syntax of the <command>CREATE FUNCTION</command> command requires
      the function body to be written as a string constant.  It is usually
--- 53,76 ----
      # PL/Perl function body
  $$ LANGUAGE plperl;
  </programlisting>
!    The body of the function is ordinary Perl code. In fact, the PL/Perl
!    glue code wraps it inside a Perl subroutine. A PL/Perl function must
     always return a scalar value.  You can return more complex structures
     (arrays, records, and sets) by returning a reference, as discussed 
below.
     Never return a list.
    </para>
 
+    <note>
+       <para>
+        The use of named nested subroutines is dangerous in Perl, 
especially if
+        they refer to lexical variables in the enclosing scope. Because 
a PL/Perl
+        function is wrapped in a subroutine, any named subroutine you 
create will
+        be nested. In general, it is far safer to create anonymous 
subroutines
+        which you call via a coderef. See the <literal>perldiag</literal>
+        man page for more details.
+       </para>
+    </note>
+
     <para>
      The syntax of the <command>CREATE FUNCTION</command> command requires
      the function body to be written as a string constant.  It is usually


Responses

pgsql-patches by date

Next:From: David FetterDate: 2005-10-12 01:36:44
Subject: Re: suggested warning about perl nested named subroutines
Previous:From: Jim C. NasbyDate: 2005-10-11 23:10:29
Subject: Re: My investigations of the postmaster Bus error

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group