It's been a while since I wrote any system code, and I was expermenting with nested closures. I came up with this gem, but wondered if you peeps could take a quick look.
I'd be interested in your comments on the safety of the system level calls and the s"appropriate" use of the nested closures.
#!/usr/bin/perl -w use strict; use POSIX ":sys_wait_h"; $SIG{CHLD} = sub {wait}; sub logger { my $file = shift; my $handle; open($handle,">$file") || die "in pain: $file: $!"; select($handle); $| =1; select(STDOUT); return sub { my $prefix = shift; return sub { print $handle "$prefix ".shift()."\n" }; }; } # for demo purposes, just to get some overlap my $warn = logger("warnings"); my $error = logger("errors"); my @identity = qw(identity1 identity2 identity3 identity4); foreach my $i (1..4) { my $identity = shift(@identity); unless (my $pid = fork()) { my $wlog = &$warn("$identity: "); my $elog = &$error("$identity: "); # make things a little more tidy sub logwarn { &$wlog(shift); } sub logerror { &$elog(shift); } foreach my $t (1..3) { sleep 2; logwarn("random warning $t"); logerror("random error $t"); } exit(0); } sleep(2); } my $kid; do { $kid = waitpid(-1,&WNOHANG); } until $kid == -1;
--
Brother Marvell
¤
In reply to safety in system calls by marvell
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |