use warnings; use strict; my %foo = map { $_ => undef } qw( forked_1 forked_2 forked_3 ); for ( keys %foo ) { open $foo{$_}, '>', "files/$_.txt" or die "Cannot write to $_.txt: $!\n"; } print STDERR "I am $$, and I am the parent.\n"; if ( my $kidpid = fork ) { my $deadkid = wait; print "$$ says: $deadkid is no more. Now I will write to the files.\n"; for ( keys %foo ) { print { $foo{$_} } "$$: $_\n"; } } elsif ( defined $kidpid ) { print STDERR "I am $$.\n"; for ( keys %foo ) { close ( $foo{$_} ) or die "Cannot close $_.txt: $!\n"; } for ( keys %foo ) { print { $foo{$_} } "$$: $_\n"; } } else { print STDERR "Failed to fork!?!?!?: $!\n"; }