Rocksolid Light

Welcome to novaBBS (click a section below)

mail  files  register  newsreader  groups  login

Message-ID:  

If Bill Gates is the Devil then Linus Torvalds must be the Messiah. -- Unknown source


devel / comp.lang.perl.misc / stateful recursion for list expansion

SubjectAuthor
o stateful recursion for list expansionRainer Weikusat

1
stateful recursion for list expansion

<87cywqrjgx.fsf@doppelsaurus.mobileactivedefense.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=9968&group=comp.lang.perl.misc#9968

  copy link   Newsgroups: comp.lang.perl.misc
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: rweiku...@talktalk.net (Rainer Weikusat)
Newsgroups: comp.lang.perl.misc
Subject: stateful recursion for list expansion
Date: Fri, 03 Nov 2023 14:37:34 +0000
Lines: 39
Message-ID: <87cywqrjgx.fsf@doppelsaurus.mobileactivedefense.com>
Mime-Version: 1.0
Content-Type: text/plain
X-Trace: individual.net jGM5wErJ/7MjgtqFOgoTJgJ3BoxagduMqKAT5zB0CGTaK4VzA=
Cancel-Lock: sha1:yZnGIMl5uCoL4eta6zFz8gKwakM= sha1:iU2Ff6BNfToQ4Un2QBfn2Dgc9WI= sha256:Y7W4DPSZJzfg3M2s9LzOGRYaHxW+149QIi61D6u1zHM=
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux)
 by: Rainer Weikusat - Fri, 3 Nov 2023 14:37 UTC

Problem: Turn a list of filehandles which may or may not be followed by
an poll (system call) event specification into a list of triples

<file descriptor>, <event spec>, 0

which can be used as input to a pack call generating a struct pollfd
array which can be used as input to poll. If there's no event
specification for a filehandle, POLLIN is supposed to be used for it.

After various attempts which all had much too much duplicated code, I
came up with the following, statefully recursive solution:

sub build_pfds
{ return pack('('.PFD.')*', &expand_fh);
}

sub expand_fh
{ return unless @_;
return (fileno(shift), &expand_ev);
}

sub expand_ev
{ my $ev;

$ev = @_ && !defined(reftype($_[0])) ? shift : POLLIN;
return ($ev, 0, &expand_fh);
}

I'd be very much interested in opinions on that.

PFD is a constant defined as 'iss', the layout of a struct pollfd.

The caller is responsible for providing a well-formed argument list, ie,
glob references optionally interspersed with event specifications ---
I'm not in the "must defend against buggy code written by other
people" camp.

1
server_pubkey.txt

rocksolid light 0.9.8
clearnet tor