Beta Shell
v2.0 ยท web2.us.cloudlogin.co
[FM]
[CMD]
[PHP]
[DB]
[INFO]
[SEC]
File Manager
~
/
usr
/
share
/
perl5
/
vendor_perl
/
Env
Upload
3 items
Name
Size
Perms
Modified
Actions
[ .. / .. ]
Sanctify.pm
3.39 KB
-rw-r--r--
2014-02-16 20:24:51
Edit
Del
Editing: Sanctify.pm
(3.39 KB)
Path: /usr/share/perl5/vendor_perl/Env/Sanctify.pm
Back
package Env::Sanctify; $Env::Sanctify::VERSION = '1.12'; #ABSTRACT: Lexically scoped sanctification of %ENV use strict; use warnings; sub sanctify { my $package = shift; my %opts = @_; $opts{lc $_} = delete $opts{$_} for keys %opts; delete $opts{env} unless $opts{env} and ref $opts{env} eq 'HASH'; delete $opts{sanctify} unless $opts{sanctify} and ref $opts{sanctify} eq 'ARRAY'; my $self = bless \%opts, $package; $self->_sanctify(); return $self; } sub _sanctify { my $self = shift; $self->{_backup} = { }; if ( $self->{sanctify} ) { foreach my $regex ( @{ $self->{sanctify} } ) { $self->{_backup}->{$_} = delete $ENV{$_} for grep { eval { /$regex/ } } keys %ENV; } } if ( $self->{env} ) { $self->{_backup}->{$_} = delete $ENV{$_} for grep { defined $ENV{$_} } keys %{ $self->{env} }; $ENV{$_} = $self->{env}->{$_} for keys %{ $self->{env} }; } return 1; } sub restore { my $self = shift; delete $ENV{$_} for keys %{ $self->{env} }; $ENV{$_} = $self->{_backup}->{$_} for keys %{ $self->{_backup} }; return $self->{_restored} = 1; } sub DESTROY { my $self = shift; $self->restore unless $self->{_restored}; } 'Sanctify yourself, set yourself free'; __END__ =pod =encoding UTF-8 =head1 NAME Env::Sanctify - Lexically scoped sanctification of %ENV =head1 VERSION version 1.12 =head1 SYNOPSIS my $sanctify = Env::Sanctify->sanctify( sanctify => [ '^POE' ] ); # do some stuff, fork some processes etc. $sanctify->restore { my $sanctify = Env::Sanctify->sanctify( env => { POE_TRACE_DEFAULT => 1 } ); # do some stuff, fork some processes etc. } # out of scope, %ENV is back to normal =head1 DESCRIPTION Env::Sanctify is a module that provides lexically scoped manipulation and sanctification of C<%ENV>. You can specify that it alter or add additional environment variables or remove existing ones according to a list of matching regexen. You can then either C<restore> the environment back manually or let the object fall out of scope, which automagically restores. Useful for manipulating the environment that forked processes and sub-processes will inherit. =head1 CONSTRUCTOR =over =item C<sanctify> Creates an Env::Sanctify object. Takes two optional arguments: 'env', a hashref of env vars to add to %ENV; 'sanctify', an arrayref of regex pattern strings to match against current %ENV vars; Any C<%ENV> var that matches a C<sanctify> regex is removed from the resultant C<%ENV>. =back =head1 METHODs =over =item C<restore> Explicitly restore the previous C<%ENV>. This is called automagically when the object is C<DESTROY>ed, for instance, when it goes out of scope. =back =head1 CAVEATS It has been reported that redefining the Env::Sanctify object causes unexpected behaviour. use strict; use warnings; use Env::Sanctify; $ENV{TEST} = 'Test thing'; my $sanctify = Env::Sanctify->sanctify( sanctify => [ 'TEST' ] ); printf "My ENV{TEST}: %s\n", $ENV{TEST}; $sanctify = Env::Sanctify->sanctify( env => { TEST => 'Other answer' } ); printf "My ENV{TEST}: %s\n", $ENV{TEST}; This script outputs: My ENV{TEST}: My ENV{TEST}: Test thing =head1 AUTHOR Chris Williams <chris@bingosnet.co.uk> =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2014 by Chris Williams. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut