my ($class, @args) = @_;
my @steps;
+ my %opts;
while (@args) {
my $arg = shift @args;
elsif ( $arg eq '--deactivate-all' ) {
push @steps, ['deactivate_all'];
}
+ elsif ( $arg =~ /^--shelltype(?:=(.*))?$/ ) {
+ my $shell = defined $1 ? $1 : shift @args;
+ $opts{shelltype} = $shell;
+ }
+ elsif ( $arg eq '--no-create' ) {
+ $opts{no_create} = 1;
+ }
elsif ( $arg =~ /^--/ ) {
die "Unknown import argument: $arg";
}
push @steps, ['activate', undef];
}
- my $self = $class->new;
+ my $self = $class->new(%opts);
for (@steps) {
my ($method, @args) = @$_;
sub roots { $_[0]->{roots} ||= [ \'PERL_LOCAL_LIB_ROOT' ] }
sub extra { $_[0]->{extra} ||= {} }
sub shelltype { $_[0]->{shelltype} ||= $_[0]->guess_shelltype }
+sub no_create { $_[0]->{no_create} }
my $_archname = $Config{archname};
my $_version = $Config{version};
if (!grep { $_ eq $path } @active_lls) {
warn "Tried to deactivate inactive local::lib '$path'\n";
- return;
+ return $self;
}
my %args = (
my ($self, $path) = @_;
$self = $self->new unless ref $self;
$path = $self->resolve_path($path);
- $self->ensure_dir_structure_for($path);
+ $self->ensure_dir_structure_for($path)
+ unless $self->no_create;
my @active_lls = $self->active_paths;
}
sub _legacy {
- my ($self, $path, $deactivating) = @_;
+ my ($self, $path) = @_;
$self = $self->new unless ref $self;
- $self = $self->${\($deactivating ? 'deactivate' : 'activate')}($path) if defined $path;
+ if (defined $path) {
+ $self = $self->activate($path);
+ }
$self;
}
&& ${$value->[0]} eq $name) {
next;
}
+ if (!ref $value
+ && $value eq $ENV{$name}) {
+ next;
+ }
$out .= $self->$build_method($name, $value);
}
return $out;
my $value = $class->_interpolate($args, '%', '%');
$value =~ s/"/\\"/g
if defined $value;
- return defined($value) ? qq{set ${name} "${value}"\n} : qq{set ${name}=\n};
+ return qq{set $name=} . (defined($value) ? qq{"$value"} : '') . "\n";
+}
+sub build_powershell_env_declaration {
+ my ($class, $name, $args) = @_;
+ my $value = $class->_interpolate($args, '$env:');
+ if (defined $value) {
+ $value =~ s/"/\\"/g;
+ return qq{\$env:$name = "$value"\n};
+ }
+ return "Remove-Item Env:\\$name\n";
}
+
sub _interpolate {
my ($class, $args, $start, $end) = @_;
return
Remove all directories that were added to search paths by C<local::lib> from the
search paths.
+=head2 --shelltype
+
+Specify the shell type to use for output. By default, the shell will be
+detected based on the environment. Should be one of: C<bourne>, C<csh>,
+C<cmd>, or C<powershell>.
+
+=head2 --no-create
+
+Prevents C<local::lib> from creating directories when activating dirs. This is
+likely to cause issues on Win32 systems.
+
=head1 METHODS
=head2 ensure_dir_structure_for
=over 4
-=item Arguments: $path, $interpolate
+=item Arguments: $path
=item Return value: %environment_vars