On Wed, 23 Aug 2023 18:23:40 -0700, Andrew Hewus Fresh wrote:
> I would have to see an example of doing that between ksh and perl.
Standard output should already be a pipe in the perl process by
virtue of running as a co-process. In theory you should be able
to poll on it checking for POLLHUP. Since our pipes are actually
bidiretional we can cheat and use select. Something like this:
- todd
lock_db() {
[ "${LOCKPID:-}" ] && return 0
# The installer doesn't have perl, so we can't lock there
[ -e /usr/bin/perl ] || return 0
set -o monitor
perl <<'EOL' |&
use v5.16;
use warnings;
no lib ('/usr/local/libdata/perl5/site_perl');
use OpenBSD::PackageInfo qw< lock_db >;
$|=1;
lock_db(0);
say $$;
my $rin = my $win = my $ein = '';
vec($ein, fileno(STDOUT), 1) = 1;
vec($rin, fileno(STDOUT), 1) = 1;
my $nfound = select(my $rout = $rin, my $wout = $win, my $eout
= $ein, undef);
EOL
set +o monitor
read -rp LOCKPID
return 0
}