PHP 8.2.31
Preview: Env.pm Size: 5.39 KB
//proc/thread-self/root/usr/share/perl5/vendor_perl/Env.pm

package Env;

our $VERSION = '1.04';

=head1 NAME

Env - perl module that imports environment variables as scalars or arrays

=head1 SYNOPSIS

    use Env;
    use Env qw(PATH HOME TERM);
    use Env qw($SHELL @LD_LIBRARY_PATH);

=head1 DESCRIPTION

Perl maintains environment variables in a special hash named C<%ENV>.  For
when this access method is inconvenient, the Perl module C<Env> allows
environment variables to be treated as scalar or array variables.

The C<Env::import()> function ties environment variables with suitable
names to global Perl variables with the same names.  By default it
ties all existing environment variables (C<keys %ENV>) to scalars.  If
the C<import> function receives arguments, it takes them to be a list of
variables to tie; it's okay if they don't yet exist. The scalar type
prefix '$' is inferred for any element of this list not prefixed by '$'
or '@'. Arrays are implemented in terms of C<split> and C<join>, using
C<$Config::Config{path_sep}> as the delimiter.

After an environment variable is tied, merely use it like a normal variable.
You may access its value 

    @path = split(/:/, $PATH);
    print join("\n", @LD_LIBRARY_PATH), "\n";

or modify it

    $PATH .= ":.";
    push @LD_LIBRARY_PATH, $dir;

however you'd like. Bear in mind, however, that each access to a tied array
variable requires splitting the environment variable's string anew.

The code:

    use Env qw(@PATH);
    push @PATH, '.';

is equivalent to:

    use Env qw(PATH);
    $PATH .= ":.";

except that if C<$ENV{PATH}> started out empty, the second approach leaves
it with the (odd) value "C<:.>", but the first approach leaves it with "C<.>".

To remove a tied environment variable from
the environment, assign it the undefined value

    undef $PATH;
    undef @LD_LIBRARY_PATH;

=head1 LIMITATIONS

On VMS systems, arrays tied to environment variables are read-only. Attempting
to change anything will cause a warning.

=head1 AUTHOR

Chip Salzenberg E<lt>F<chip@fin.uucp>E<gt>
and
Gregor N. Purdy E<lt>F<gregor@focusresearch.com>E<gt>

=cut

sub import {
    my ($callpack) = caller(0);
    my $pack = shift;
    my @vars = grep /^[\$\@]?[A-Za-z_]\w*$/, (@_ ? @_ : keys(%ENV));
    return unless @vars;

    @vars = map { m/^[\$\@]/ ? $_ : '$'.$_ } @vars;

    eval "package $callpack; use vars qw(" . join(' ', @vars) . ")";
    die $@ if $@;
    foreach (@vars) {
	my ($type, $name) = m/^([\$\@])(.*)$/;
	if ($type eq '$') {
	    tie ${"${callpack}::$name"}, Env, $name;
	} else {
	    if ($^O eq 'VMS') {
		tie @{"${callpack}::$name"}, Env::Array::VMS, $name;
	    } else {
		tie @{"${callpack}::$name"}, Env::Array, $name;
	    }
	}
    }
}

sub TIESCALAR {
    bless \($_[1]);
}

sub FETCH {
    my ($self) = @_;
    $ENV{$$self};
}

sub STORE {
    my ($self, $value) = @_;
    if (defined($value)) {
	$ENV{$$self} = $value;
    } else {
	delete $ENV{$$self};
    }
}

######################################################################

package Env::Array;
 
use Config;
use Tie::Array;

@ISA = qw(Tie::Array);

my $sep = $Config::Config{path_sep};

sub TIEARRAY {
    bless \($_[1]);
}

sub FETCHSIZE {
    my ($self) = @_;
    return 1 + scalar(() = $ENV{$$self} =~ /\Q$sep\E/g);
}

sub STORESIZE {
    my ($self, $size) = @_;
    my @temp = split($sep, $ENV{$$self});
    $#temp = $size - 1;
    $ENV{$$self} = join($sep, @temp);
}

sub CLEAR {
    my ($self) = @_;
    $ENV{$$self} = '';
}

sub FETCH {
    my ($self, $index) = @_;
    return (split($sep, $ENV{$$self}))[$index];
}

sub STORE {
    my ($self, $index, $value) = @_;
    my @temp = split($sep, $ENV{$$self});
    $temp[$index] = $value;
    $ENV{$$self} = join($sep, @temp);
    return $value;
}

sub EXISTS {
    my ($self, $index) = @_;
    return $index < $self->FETCHSIZE;
}

sub DELETE {
    my ($self, $index) = @_;
    my @temp = split($sep, $ENV{$$self});
    my $value = splice(@temp, $index, 1, ());
    $ENV{$$self} = join($sep, @temp);
    return $value;
}

sub PUSH {
    my $self = shift;
    my @temp = split($sep, $ENV{$$self});
    push @temp, @_;
    $ENV{$$self} = join($sep, @temp);
    return scalar(@temp);
}

sub POP {
    my ($self) = @_;
    my @temp = split($sep, $ENV{$$self});
    my $result = pop @temp;
    $ENV{$$self} = join($sep, @temp);
    return $result;
}

sub UNSHIFT {
    my $self = shift;
    my @temp = split($sep, $ENV{$$self});
    my $result = unshift @temp, @_;
    $ENV{$$self} = join($sep, @temp);
    return $result;
}

sub SHIFT {
    my ($self) = @_;
    my @temp = split($sep, $ENV{$$self});
    my $result = shift @temp;
    $ENV{$$self} = join($sep, @temp);
    return $result;
}

sub SPLICE {
    my $self = shift;
    my $offset = shift;
    my $length = shift;
    my @temp = split($sep, $ENV{$$self});
    if (wantarray) {
	my @result = splice @temp, $offset, $length, @_;
	$ENV{$$self} = join($sep, @temp);
	return @result;
    } else {
	my $result = scalar splice @temp, $offset, $length, @_;
	$ENV{$$self} = join($sep, @temp);
	return $result;
    }
}

######################################################################

package Env::Array::VMS;
use Tie::Array;

@ISA = qw(Tie::Array);
 
sub TIEARRAY {
    bless \($_[1]);
}

sub FETCHSIZE {
    my ($self) = @_;
    my $i = 0;
    while ($i < 127 and defined $ENV{$$self . ';' . $i}) { $i++; };
    return $i;
}

sub FETCH {
    my ($self, $index) = @_;
    return $ENV{$$self . ';' . $index};
}

sub EXISTS {
    my ($self, $index) = @_;
    return $index < $self->FETCHSIZE;
}

sub DELETE { }

1;

Directory Contents

Dirs: 55 × Files: 33

Name Size Perms Modified Actions
Algorithm DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
App DIR
- drwxr-xr-x 2025-06-04 02:39:29
Edit Download
Archive DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
Authen DIR
- drwxr-xr-x 2024-03-03 23:04:37
Edit Download
autodie DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
B DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
Carp DIR
- drwxr-xr-x 2024-03-03 19:11:19
Edit Download
Config DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
CPAN DIR
- drwxr-xr-x 2025-06-04 02:39:29
Edit Download
Data DIR
- drwxr-xr-x 2024-03-03 23:04:38
Edit Download
Date DIR
- drwxr-xr-x 2024-03-03 23:04:32
Edit Download
Digest DIR
- drwxr-xr-x 2024-03-03 23:04:36
Edit Download
Encode DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
Error DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
Exporter DIR
- drwxr-xr-x 2024-03-03 19:11:19
Edit Download
ExtUtils DIR
- drwxr-xr-x 2024-03-03 19:12:34
Edit Download
File DIR
- drwxr-xr-x 2024-03-03 23:04:33
Edit Download
Filter DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
Getopt DIR
- drwxr-xr-x 2024-03-03 19:11:18
Edit Download
Git DIR
- drwxr-xr-x 2025-07-23 11:39:25
Edit Download
HTML DIR
- drwxr-xr-x 2024-03-03 23:04:36
Edit Download
HTTP DIR
- drwxr-xr-x 2024-06-15 07:05:55
Edit Download
inc DIR
- drwxr-xr-x 2024-03-03 19:12:34
Edit Download
IO DIR
- drwxr-xr-x 2024-03-03 23:04:34
Edit Download
IPC DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
JSON DIR
- drwxr-xr-x 2024-03-03 19:11:21
Edit Download
lib DIR
- drwxr-xr-x 2024-03-03 19:11:23
Edit Download
libwww DIR
- drwxr-xr-x 2024-03-03 23:04:46
Edit Download
local DIR
- drwxr-xr-x 2024-03-03 19:11:23
Edit Download
Locale DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
LWP DIR
- drwxr-xr-x 2024-03-03 23:04:46
Edit Download
Math DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
Module DIR
- drwxr-xr-x 2024-03-03 19:12:34
Edit Download
Mozilla DIR
- drwxr-xr-x 2024-03-03 19:11:18
Edit Download
MRO DIR
- drwxr-xr-x 2024-03-03 19:11:23
Edit Download
Net DIR
- drwxr-xr-x 2024-03-05 23:47:46
Edit Download
Package DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
Params DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
Parse DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
Perl DIR
- drwxr-xr-x 2024-03-03 19:11:21
Edit Download
PerlIO DIR
- drwxr-xr-x 2024-03-03 19:11:23
Edit Download
Pod DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
POD2 DIR
- drwxr-xr-x 2024-03-03 19:11:23
Edit Download
Software DIR
- drwxr-xr-x 2024-03-03 19:11:23
Edit Download
Sub DIR
- drwxr-xr-x 2024-03-03 19:11:22
Edit Download
TAP DIR
- drwxr-xr-x 2024-03-03 19:11:20
Edit Download
Term DIR
- drwxr-xr-x 2024-03-03 19:11:18
Edit Download
Test DIR
- drwxr-xr-x 2024-03-03 19:11:23
Edit Download
Test2 DIR
- drwxr-xr-x 2024-03-03 19:11:23
Edit Download
Text DIR
- drwxr-xr-x 2024-03-03 19:11:23
Edit Download
Thread DIR
- drwxr-xr-x 2024-03-03 19:11:23
Edit Download
Time DIR
- drwxr-xr-x 2024-03-03 23:04:32
Edit Download
Try DIR
- drwxr-xr-x 2024-03-03 23:04:32
Edit Download
Types DIR
- drwxr-xr-x 2024-03-03 23:04:26
Edit Download
WWW DIR
- drwxr-xr-x 2024-03-03 23:04:31
Edit Download
12.58 KB lrw-r--r-- 2015-07-09 07:16:41
Edit Download
22.85 KB lrw-r--r-- 2018-02-03 10:59:33
Edit Download
20.64 KB lrw-r--r-- 2018-02-03 10:59:37
Edit Download
15.78 KB lrw-r--r-- 2018-02-03 10:59:42
Edit Download
30.32 KB lrw-r--r-- 2019-10-13 07:06:13
Edit Download
14.38 KB lrw-r--r-- 2019-10-13 13:55:02
Edit Download
138.01 KB lrw-r--r-- 2025-06-03 14:32:20
Edit Download
10.46 KB lrw-r--r-- 2019-10-13 08:28:15
Edit Download
5.39 KB lrw-r--r-- 2013-03-02 17:10:37
Edit Download
24.29 KB lrw-r--r-- 2019-10-14 15:30:40
Edit Download
98.09 KB lrw-r--r-- 2017-05-18 19:07:59
Edit Download
6.83 KB lrw-r--r-- 2017-12-03 17:40:21
Edit Download
18.31 KB lrw-r--r-- 2019-10-13 08:52:02
Edit Download
56.81 KB lrw-r--r-- 2015-07-09 07:16:41
Edit Download
46.95 KB lrw-r--r-- 2025-07-22 14:33:06
Edit Download
21.17 KB lrw-r--r-- 2018-06-05 18:49:03
Edit Download
2.15 KB lrw-r--r-- 2010-07-09 12:26:51
Edit Download
967 B lrw-r--r-- 2018-03-30 05:53:02
Edit Download
2.51 KB lrw-r--r-- 2018-07-06 17:53:12
Edit Download
9.16 KB lrw-r--r-- 2016-08-02 16:31:42
Edit Download
77 B lrw-r--r-- 2018-06-05 05:02:52
Edit Download
22.22 KB lrw-r--r-- 2018-06-05 05:02:52
Edit Download
14.12 KB lrw-r--r-- 2018-06-05 05:02:52
Edit Download
9.24 KB lrw-r--r-- 2018-06-05 05:02:52
Edit Download
36.66 KB lrw-r--r-- 2018-06-05 05:02:52
Edit Download
87.30 KB lrw-r--r-- 2018-06-05 05:02:52
Edit Download
54.21 KB lrw-r--r-- 2018-06-05 05:02:52
Edit Download
38.69 KB lrw-r--r-- 2018-06-05 05:02:52
Edit Download
36.93 KB lrw-r--r-- 2018-06-05 05:02:52
Edit Download
48.93 KB lrw-r--r-- 2018-06-05 05:02:52
Edit Download
14.50 KB lrw-r--r-- 2018-06-05 05:02:52
Edit Download
134.02 KB lrw-r--r-- 2018-06-05 05:02:52
Edit Download
6.24 KB lrw-r--r-- 2018-03-30 05:53:02
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).