Commit 95f202c0 authored by Tom Lane's avatar Tom Lane

Adjust description of use_strict parameter. Some other minor editorial

cleanup.
parent f21e2622
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/plperl.sgml,v 2.43 2005/08/12 21:42:53 momjian Exp $ $PostgreSQL: pgsql/doc/src/sgml/plperl.sgml,v 2.44 2005/08/24 18:56:07 tgl Exp $
--> -->
<chapter id="plperl"> <chapter id="plperl">
...@@ -46,45 +46,17 @@ $PostgreSQL: pgsql/doc/src/sgml/plperl.sgml,v 2.43 2005/08/12 21:42:53 momjian E ...@@ -46,45 +46,17 @@ $PostgreSQL: pgsql/doc/src/sgml/plperl.sgml,v 2.43 2005/08/12 21:42:53 momjian E
<para> <para>
To create a function in the PL/Perl language, use the standard To create a function in the PL/Perl language, use the standard
<xref linkend="sql-createfunction" endterm="sql-createfunction-title"> <xref linkend="sql-createfunction" endterm="sql-createfunction-title">
syntax. A PL/Perl function must always return a scalar value. You syntax:
can return more complex structures (arrays, records, and sets)
in the appropriate context by returning a reference.
Never return a list. Here follows an example of a PL/Perl
function.
<programlisting> <programlisting>
CREATE FUNCTION <replaceable>funcname</replaceable> (<replaceable>argument-types</replaceable>) RETURNS <replaceable>return-type</replaceable> AS $$ CREATE FUNCTION <replaceable>funcname</replaceable> (<replaceable>argument-types</replaceable>) RETURNS <replaceable>return-type</replaceable> AS $$
# PL/Perl function body # PL/Perl function body
$$ LANGUAGE plperl; $$ LANGUAGE plperl;
</programlisting> </programlisting>
The body of the function is ordinary Perl code. The body of the function is ordinary Perl code. A PL/Perl function must
</para> always return a scalar value. You can return more complex structures
<para> (arrays, records, and sets) by returning a reference, as discussed below.
As with ordinary Perl code, you should use the strict pragma, Never return a list.
which you can do in one of two ways:
<itemizedlist>
<listitem>
<para>
Globally, by adding <quote>plperl</quote> to the list of <xref
linkend="guc-custom-variable-classes"> and setting
<literal>plperl.use_strict</literal> to true in
<filename>postgresql.conf</filename>
</para>
</listitem>
<listitem>
<para>
One function at a time, by using PL/PerlU (you must be database
superuser to do this) and including
<programlisting>
use strict;
</programlisting>
in the function body.
</para>
</listitem>
</itemizedlist>
</para> </para>
<para> <para>
...@@ -205,13 +177,13 @@ SELECT * FROM perl_row(); ...@@ -205,13 +177,13 @@ SELECT * FROM perl_row();
<para> <para>
PL/Perl functions can also return sets of either scalar or PL/Perl functions can also return sets of either scalar or
composite types. In general, you'll want to return rows one at a composite types. Usually you'll want to return rows one at a
time both to speed up startup time and to keep from queueing up time, both to speed up startup time and to keep from queueing up
the entire result set in memory. You can do this with the entire result set in memory. You can do this with
<function>return_next</function> as illustrated below. Note that <function>return_next</function> as illustrated below. Note that
after the last <function>return_next</function>, you must put after the last <function>return_next</function>, you must put
either <literal>return;</literal> or (better) <literal>return either <literal>return</literal> or (better) <literal>return
undef;</literal> undef</literal>.
<programlisting> <programlisting>
CREATE OR REPLACE FUNCTION perl_set_int(int) CREATE OR REPLACE FUNCTION perl_set_int(int)
...@@ -237,7 +209,7 @@ $$ LANGUAGE plperl; ...@@ -237,7 +209,7 @@ $$ LANGUAGE plperl;
contains either scalars, references to arrays, or references to contains either scalars, references to arrays, or references to
hashes for simple types, array types, and composite types, hashes for simple types, array types, and composite types,
respectively. Here are some simple examples of returning the entire respectively. Here are some simple examples of returning the entire
result set as a reference: result set as an array reference:
<programlisting> <programlisting>
CREATE OR REPLACE FUNCTION perl_set_int(int) RETURNS SETOF INTEGER AS $$ CREATE OR REPLACE FUNCTION perl_set_int(int) RETURNS SETOF INTEGER AS $$
...@@ -267,6 +239,27 @@ SELECT * FROM perl_set(); ...@@ -267,6 +239,27 @@ SELECT * FROM perl_set();
it is a hazard if you declare a <application>PL/Perl</> function it is a hazard if you declare a <application>PL/Perl</> function
as returning a domain type. as returning a domain type.
</para> </para>
<para>
If you wish to use the <literal>strict</> pragma with your code,
the easiest way to do so is to <command>SET</>
<literal>plperl.use_strict</literal> to true. This parameter affects
subsequent compilations of <application>PL/Perl</> functions, but not
functions already compiled in the current session. To set the
parameter before <application>PL/Perl</> has been loaded, it is
necessary to have added <quote><literal>plperl</></> to the <xref
linkend="guc-custom-variable-classes"> list in
<filename>postgresql.conf</filename>.
</para>
<para>
Another way to use the <literal>strict</> pragma is to just put
<programlisting>
use strict;
</programlisting>
in the function body. But this only works for <application>PL/PerlU</>
functions, since <literal>use</> is not a trusted operation.
</para>
</sect1> </sect1>
<sect1 id="plperl-database"> <sect1 id="plperl-database">
......
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.347 2005/08/22 17:34:56 momjian Exp $ $PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.348 2005/08/24 18:56:07 tgl Exp $
--> -->
<chapter Id="runtime"> <chapter Id="runtime">
...@@ -4382,10 +4382,10 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' ...@@ -4382,10 +4382,10 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
when using custom variables: when using custom variables:
<programlisting> <programlisting>
custom_variable_classes = 'plr,pljava' custom_variable_classes = 'plr,plperl'
plr.path = '/usr/lib/R' plr.path = '/usr/lib/R'
pljava.foo = 1 plperl.use_strict = true
plruby.bar = true # generates error, unknown class name plruby.use_strict = true # generates error: unknown class name
</programlisting> </programlisting>
</para> </para>
</sect2> </sect2>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment