Changes for version 0.08 - 2026-11-06

  • Since 0.07: Windows (EXPERIMENTAL): win_spawn.h compared with Perl's own spawn and fixed; the module built with MinGW-w64 against Strawberry Perl 5.38.2 and run under Wine; batch files; the options of %Proc::Spawner::WINDOWS. Fixed on every system: spawn's result in scalar context when a setting is missing. The figures of post4-0.04 hold (the measured files differ only in $VERSION); digest of the code they depend on: 3956c46c16d3290baf27f9475da8b72d431f17a194b2ba9fba91e3e0fe863bb8.
  • Windows, run under Wine with Strawberry Perl 5.38.2 (Spawner.dll built with MinGW-w64): spawn, waitpid, options work. New: batch files run through the system's cmd.exe, arguments quoted as Rust's standard library does since BatBadBut (CR, LF refused); %Proc::Spawner::WINDOWS: new_group (Ctrl-C reaches the parent, not the children; default on), kill_with_parent (a job object that ends the children with the parent; default on), new_console (as Perl's spawn; default on); console pseudo-handles of Windows 7 kept out of the handle list. Fixed: spawn returned its count of results in scalar context when a setting was missing (now the pid); Proc::Spawner no longer uses fcntl and SIGCHLD on Windows (the loop polls there). doc/pspawn-spawner.md, section 8: how the child sees its arguments, Perl's system against ours.
  • win_spawn.h compared with Perl's own spawn on Windows (win32/win32.c of perl 5.38.2) and fixed: PATHEXT's extensions before the bare name, and quoted PATH entries, as Perl's qualified_path(); cmd.exe /c quoted as Perl's create_command_line() does; the environment block sorted, with the drives' directories (=C:) kept; E2BIG over 32766 characters; strings not held as UTF-8 read in the ANSI code page (as Perl's CreateProcessA); the default environment and directory are Perl's (PerlEnv_get_childenv, PerlEnv_get_childdir); its own allocator on the process heap (found by compiling against Strawberry Perl 5.38.2, where malloc and free are Perl's macros). Spawner.dll compiles and links with MinGW-w64 against Strawberry Perl's headers and libperl538.a; not yet loaded. Open questions and the deliberate differences: doc/pspawn-spawner.md, section 8.

Documentation

a map of the design documents shipped in doc/ (EXPERIMENTAL)

Modules

builtins of the large shell subset: alias, the job builtins, and the interactive ones (EXPERIMENTAL)
parse a Bourne-shell subset into a tree (EXPERIMENTAL)
parse as much of POSIX sh as dash and bash run alike (EXPERIMENTAL)
the Proc::ShellSubset grammar with its options frozen (EXPERIMENTAL)
start children with posix_spawn(3) and run the one event loop (EXPERIMENTAL)

Provides

in lib/Proc/ShellSpawn.pm
in lib/Proc/ShellSpawn/Large.pm
in lib/Proc/Spawner/Graph.pm