From: Eric Wong Date: Sat, 14 Sep 2019 09:21:14 +0000 (+0000) Subject: qspawn: simplify by using PerlIO::scalar X-Git-Tag: v1.2.0~102 X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=commitdiff_plain;h=bb20bc29a831d8f84613d48af729ffaede9d43e2 qspawn: simplify by using PerlIO::scalar I didn't know PerlIO::scalar existed until a few months ago, but it's been distributed with Perl since 5.8 and doesn't seem to be split out into it's own package on any distro. --- diff --git a/lib/PublicInbox/Qspawn.pm b/lib/PublicInbox/Qspawn.pm index f2e91ab6..76e48e81 100644 --- a/lib/PublicInbox/Qspawn.pm +++ b/lib/PublicInbox/Qspawn.pm @@ -153,11 +153,12 @@ sub start { # and safe to slurp. sub psgi_qx { my ($self, $env, $limiter, $qx_cb) = @_; - my $qx = PublicInbox::Qspawn::Qx->new; + my $scalar = ''; + open(my $qx, '+>', \$scalar) or die; # PerlIO::scalar my $end = sub { finish($self, $env); - eval { $qx_cb->($qx) }; - $qx = undef; + eval { $qx_cb->(\$scalar) }; + $qx = $scalar = undef; }; my $rpipe; # comes from popen_rd my $async = $env->{'pi-httpd.async'}; @@ -338,21 +339,4 @@ sub setup_rlimit { } } -# captures everything into a buffer and executes a callback when done -package PublicInbox::Qspawn::Qx; -use strict; -use warnings; - -sub new { - my ($class) = @_; - my $buf = ''; - bless \$buf, $class; -} - -# called by PublicInbox::HTTPD::Async ($fh->write) -sub write { - ${$_[0]} .= $_[1]; - undef; -} - 1;