%ENV. En el ejemplo que sigue ataremos
variables escalares Perl a las correspondientes variables de entorno
con el mismo nombre,
de manera que la modificación de la variable Perl atada conlleve la
modificación de la variable de entorno:
 1 package Myenv;
 2 
 3 sub import {
 4     my ($callpack) = caller(0); # nombre del paquete que usa a esta rutina
 5     my $pack = shift; 
 6     my @vars = grep /^[A-Za-z_]\w*$/, (@_ ? @_ : keys(%ENV));
 7     return unless @vars;
 8 
 9     foreach (@vars) {
10       tie ${"${callpack}::$_"}, Myenv, $_;
11     }
12 }
13 
14 sub TIESCALAR {
15     bless \($_[1]);
16 }
17 
18 sub FETCH {
19     my ($self) = @_;
20     $ENV{$$self};
21 }
22 
23 sub STORE {
24     my ($self, $value) = @_;
25     if (defined($value)) {
26       $ENV{$$self} = $value;
27     } else {
28       delete $ENV{$$self};
29     }
30 }
31 
32 1;
La función import obtiene en la línea 4 el nombre del paquete
que usa Myenv. Después, si se han explicitado argumentos
en el pragma use se dejan en @vars (línea 6) y si no
@vars es inicializada con todas las claves del hash %ENV.
Repase la sección  5.7 para mas detalles sobre 
el proceso de importación. En el bucle de las líneas 9-11
instalamos en la tabla de símbolos del paquete usuario las 
entradas a las variables de entorno.
Sigue el programa de uso:
#!/usr/bin/perl -d use Myenv qw(HOME); print "home = $HOME\n"; $HOME = "/tmp/"; system 'echo $HOME';y su ejecución con el depurador:
$ ./env.pl
Default die handler restored.
Loading DB routines from perl5db.pl version 1.07
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(./env.pl:4):     print "home = $HOME\n";
  DB<1> s
Myenv::FETCH(Myenv.pm:19):          my ($self) = @_;
  DB<1>
Myenv::FETCH(Myenv.pm:20):          $ENV{$$self};
  DB<1> x $self
0  Myenv=SCALAR(0x811fa8c)
   -> 'HOME'
  DB<2>
home = /home/lhp
main::(./env.pl:5):     $HOME = "/tmp/";
  DB<2> s
Myenv::STORE(Myenv.pm:24):          my ($self, $value) = @_;
  DB<2>
Myenv::STORE(Myenv.pm:25):          if (defined($value)) {
  DB<2>
Myenv::STORE(Myenv.pm:26):              $ENV{$$self} = $value;
  DB<2>
main::(./env.pl:6):     system 'echo $HOME';
  DB<2>
/tmp/
Debugged program terminated.  Use q to quit or R to restart,
  use O inhibit_exit to avoid stopping after program termination,
  h q, h R or h O to get additional info.
Casiano Rodríguez León
