psh

 view release on metacpan or  search on metacpan

lib/Psh/Builtins/Export.pm  view on Meta::CPAN

package Psh::Builtins::Export;

require Psh::Support::Env;
require Psh::Options;
require Psh::Util;

=item * C<export VAR [=VALUE]>

Just like setenv, below, except that it also ties the variable (in the
Perl sense) so that subsequent changes to the variable automatically
affect the environment. Variables who are lists and appear in option
'array_exports' will also by tied to the array of the same name.
Note that the variable must be specified without any Perl specifier
like C<$> or C<@>.

=cut

sub bi_export
{
	my $var = Psh::Support::Env::do_setenv(@_);
	if ($var) {
		my @result = Psh::PerlEval::protected_eval("tied(\$$var)");
		my $oldtie = $result[0];
		if (defined($oldtie)) {
			if (ref($oldtie) ne 'Env') {
				Psh::Util::print_warning_i18n('bi_export_tied',$var,$oldtie);
			}
		} else {
			Psh::PerlEval::protected_eval("use Env '$var';");
			my $ae= Psh::Options::get_option('array_exports');
			if( $ae and $ae->{$var}) {
				eval {
					require Env::Array;
				};
				if( ! $@) {
					Psh::PerlEval::protected_eval("use Env::Array qw($var $ae->{var});",'hide');
				}
			}
		}
	} else {
		Psh::Util::print_error_i18n('usage_export');
		return (0,undef);
	}
	return (1,undef);
}

1;



( run in 0.572 second using v1.01-cache-2.11-cpan-39bf76dae61 )