my $filepath = "/tmp/fifo"; logInFIFO('log line example'); sub logInFIFO { my $logline = shift; my $fifolines = 5; my @log; if (-e $filepath) { open(IN, "< $filepath") || die $!; @log = (); close IN; } # transform and validate $logline here push @log, "$logline\n"; shift @log while ($#log > $fifolines-1); eval { open(OUT, ">$filepath") || die $!; print OUT @log; close(OUT) || die $!; }; return $@ ? warn($@) && 0 : 1; }