#!/usr/bin/env perl use strict; use warnings; my $trials = 1000; sub bdayRuns { my $space = shift // 2**16; my $avg; TRIAL: for (1..$trials) { my %keys; for my $chance (1..$space) { my $r = int(rand($space)); if (++$keys{$r} > 1) { $avg+= $chance; next TRIAL; } } } $avg = $avg / $trials; return "Average collision out of $space: $avg : Runs: $trials\n"; } pipe(my $rh, my $wh); for (1..4) { my $pid = fork; if (!$pid) { #child print $wh " $$ - " . bdayRuns(365); exit; } } print "$_" while (<$rh>); 1 until wait == -1;