ExtUtils-Helpers

 view release on metacpan or  search on metacpan

lib/ExtUtils/Helpers/Unix.pm  view on Meta::CPAN

	$string =~ s/^\s+|\s+$//g;
	return if not length $string;

	return shellwords($string);
}

sub detildefy {
	my $value = shift;
	# tilde with optional username
	for ($value) {
		s{ ^ ~ (?= /|$)}          [ $ENV{HOME} || (getpwuid $>)[7] ]ex or # tilde without user name
		s{ ^ ~ ([^/]+) (?= /|$) } { (getpwnam $1)[7] || "~$1" }ex;        # tilde with user name
	}
	return $value;
}

1;

# ABSTRACT: Unix specific helper bits

__END__

t/tilde.t  view on Meta::CPAN

	my $env_name = $^O eq 'MSWin32' ? 'USERPROFILE' : 'HOME';
	my $home = $ENV{$env_name};

	if ($^O eq 'VMS') {
		# Convert the path to UNIX format, trim off the trailing slash
		$home = VMS::Filespec::unixify($home);
		$home =~ s#/$##;
	}

	unless (defined $home) {
		my @info = eval { getpwuid $> };
		skip "No home directory for tilde-expansion tests", 8 if $@ or !defined $info[7];
		$home = $info[7];
	}

	is( detildefy('~'),	$home);

	is( detildefy('~/fooxzy'), "$home/fooxzy");

	is( detildefy('~/ fooxzy'), "$home/ fooxzy");

	is( detildefy('~/fo o'), "$home/fo o");

	is( detildefy('fooxzy~'), 'fooxzy~');

	# Test when HOME is different from getpwuid(), as in sudo.
	{
		local $ENV{HOME} = '/wibble/whomp';
		local $ENV{USERPROFILE} = $ENV{HOME};

		is( detildefy('~'), "/wibble/whomp");
	}

	skip "On OS/2 EMX all users are equal", 2 if $^O eq 'os2';
	is( detildefy('~~'), '~~' );
	is( detildefy('~ fooxzy'), '~ fooxzy' );
}

# Again, with named users
SKIP: {
	my @info = eval { getpwuid $> };
	skip "No home directory for tilde-expansion tests", 1 if $@ or !defined $info[7] or !defined $info[0];
	my ($me, $home) = @info[0,7];

	my $expected = "$home/fooxzy";

	if ($^O eq 'VMS') {
		# Convert the path to UNIX format and trim off the trailing slash
		$home = VMS::Filespec::unixify($home);
		$home =~ s#/$##;
		$expected = $home . '/../[^/]+' . '/fooxzy';



( run in 0.299 second using v1.01-cache-2.11-cpan-8d75d55dd25 )