Native::Exec -- NativeCall bindings for Unix exec*() calls
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
eg
lib/Native
t
.gitignore
META6.json
Makefile
README.md

README.md

NAME

Native::Exec -- NativeCall bindings for Unix exec*() calls

SYNOPSIS

use Native::Exec;

# Default searches PATH for executable
exec 'echo', 'hi';

# Specify :nopath to avoid PATH searching
exec :nopath, '/bin/echo', 'hi';

# Override ENV entirely by passing in named params
exec 'env', HOME => '/my/home', PATH => '/bin:/usr/bin';

DESCRIPTION

Very basic wrapper around NativeCall bindings for the Unix execv(), execve(), execvp(), and execvpe() Unix calls.

exec defaults to the 'p' variants that search your PATH for the specified executable. If you include the :nopath option, it will use the non 'p' variants and avoid the PATH search. You can also include a '/' in your specified executable and that will also avoid the PATH search within the exec* routines.

Including any named parameters OTHER THAN :nopath will build a new environment for the execed program, replacing the existing environment entirely, using the 'e' variants.

EXCEPTIONS

exec does NOT return. On success, the execed program will replace your Perl 6 program entirely. If there are any errors, such as not finding the specified program, it will throw X::Native::Exec with the native error code. You can access the native error code with .errno, and the native error message with .message.

exec 'non-existant';

CATCH {
    when X::Native::Exec {
      say "Native Error Code: ", .errno;
      say "Native Error Message: ", .message;
    }
}

NOTE

The exec* family are Unix specific, and are unlikely to work on other architectures.