What you want is to explicitly
fork() then exec(). That's the tried-and-true traditional way to launch another process on Unixy systems, and fork() returns the child's PID in the parent (and 0 in the child, or undef if the fork() failed).
This code is simple, but it shows the concept.
if ( my $pid = fork() ) {
my $pid_of_child_that_finished = wait();
my $status_code_of_child = $?; # or $CHILD_ERROR_NATIVE
} elsif ( defined $pid ) {
exec( '/bin/ls' );
} else {
warn "Something broke: can't fork()!\n";
}
# continue processing in the parent after child is done