http://www.perlmonks.org?node_id=524963


in reply to Append to a busy flat-file db without leaving customer in lurch

Some suggestions in case you want to use flat files...

Find out why flock is failing. I'm pretty sure on most platforms that it blocks until the lock occurs (unless you use LOCK_NB). What is '$!' when it dies?

If you don't need updates to show up immediately in the database, defer them. For example, write your output to a separate file and continue on. Then have a single process periodically come along and read these other files and append to the database.

Depending on your platform and filesystem (check your docs), you *may* be able to get away with no lock at all while opening a file in append mode. Some OSs arbitrate appenders for you if you are writing a single line of text since it's a very common operation (esp for log files). FWIW, I personally wouldn't do this since then the code relies on a specific setup and it is hard to test this to make sure it's working, but YMMV. Update: After thinking about this, it probably also depends on you printing only small, single lines of text at a time. Another reason to avoid it.

Since you care that the 'print' works, check the error code for it. If you run out of disk space, your code can silently fail.