Revision history for Perl extension Command-Run 1.03 2026-08-03T14:38:29Z - run() now takes command, stdout and stderr as temporary parameters, as PARAMETERS has been describing. They were silently ignored before, so this breaks nothing that worked. my $result = Command::Run->new->run(command => \@command, stdin => $data); The only visible difference is that stderr given as a scalar reference is now captured instead of passing through to the terminal. - Fix POD examples giving a command list to new(), which takes key-value pairs and never worked that way. 1.02 2026-07-05T01:19:46Z - Fix PerlIO encoding layer accumulation on STDIN/STDOUT in nofork mode. Layer changes are now undone before restoring the handles, so long-running processes no longer degrade. With the fix, nofork with :encoding is 50x faster than before (316/s -> 15,997/s) and raw mode is optional rather than necessary. - Raw mode no longer leaks the :utf8 flag to the caller's standard filehandles. 1.01 2026-06-03T08:12:11Z - Tmpfile: add raw mode (new(raw => 1)) for byte-transparent temporary files, opening the handle with :raw instead of :encoding(utf8) so byte streams (qx// output, pre-encoded UTF-8) are stored and read back unchanged without double encoding 1.00 2026-04-27T01:50:48Z - Tmpfile: probe fd-path with the actual allocated fd to detect FreeBSD without fdescfs (where /dev/fd/0,1,2 exist but /dev/fd/N for N>2 do not); prefer /proc/self/fd over /dev/fd; path() now returns undef when no usable fd-path is available 0.9903 2026-02-21T10:10:36Z - Add nofork option for fork-free code reference execution - Add raw option to avoid PerlIO :encoding(utf8) overhead and leak - Optimize nofork tmpfile reuse (truncate+seek instead of recreate) - Protect caller's $_ with local $_ in nofork execution - Add STDOUT binmode in nofork mode (symmetry with STDIN) - Add comprehensive NOFORK AND RAW MODE documentation 0.9902 2026-01-16T11:24:17Z - Remove new(@command) style; use command => [...] or ->command() instead 0.9901 2026-01-15T10:32:46Z - Add with() method for fluent parameter setting - Add stdout/stderr capture via scalar references - run() parameters are now temporary (don't modify object state) - Remove setstdin from public API (use with(stdin => ...) instead) - Add PARAMETERS section to documentation 0.99 2026-01-15T05:49:39Z - Initial release - Execute external commands or Perl code references - Capture stdout with flexible stderr handling (pass-through, redirect to stdout, or separate capture) - Output accessible via /dev/fd/N path for external commands - Method chaining support - Derived from App::cdif::Command