37.4. Valeurs globales dans PL/Perl

Vous pouvez utiliser le hachage global %_SHARED pour stocker les donn�es, incluant les r�f�rences de code, entre les appels de fonction pour la dur�e de vie de la session en cours.

Voici un exemple simple pour des donn�es partag�es :

      CREATE OR REPLACE FUNCTION set_var(name text, val text) RETURNS text AS $$
      if ($_SHARED{$_[0]} = $_[1]) {
      return 'ok';
      } else {
      return "Ne peux pas initialiser la variable partag�e $_[0] � $_[1]";
      }
      $$ LANGUAGE plperl;
      
      CREATE OR REPLACE FUNCTION get_var(name text) RETURNS text AS $$
      return $_SHARED{$_[0]};
      $$ LANGUAGE plperl;
      
      SELECT set_var('sample', 'Bonjour, PL/Perl ! Comment va ?');
      SELECT get_var('sample');
    

Voici un exemple l�g�rement plus compliqu� utilisant une r�f�rence de code :

      CREATE OR REPLACE FUNCTION ma_fonction() RETURNS void AS $$
      $_SHARED{myquote} = sub {
      my $arg = shift;
      $arg =~ s/(['\\])/\\$1/g;
      return "'$arg'";
      };
      $$ LANGUAGE plperl;

      SELECT ma_fonction(); /* initialise la fonction */

      /* Initialise une fonction qui utilise la fonction quote */

      CREATE OR REPLACE FUNCTION utilise_quote(TEXT) RETURNS text AS $$
      my $text_to_quote = shift;
      my $qfunc = $_SHARED{myquote};
      return &$qfunc($text_to_quote);
      $$ LANGUAGE plperl;
    

(Vous pouviez avoir remplac� le code ci-dessus avec la seule ligne return $_SHARED{myquote}->($_[0]); au prix d'une mauvaise lisibilit�.)