We should open file with write intent for using
flock(fh, LOCK_EX) for portability. Because
flock(fh, LOCK_EX) is failed without write intent on some platforms(such as Solaris) and platforms which does not provide
flock. (In this case Perl emulates
flock with other API).
On Linux or some BSD(include MacOSX),
flock(fh, LOCK_EX) successes without write intent. However if you want to work your module on many platforms, you should open with write intent.
perldoc -f flock says
Note that the fcntl(2) emulation of flock(3) requires that FILEHANDLE be open with read intent to use LOCK_SH and requires that it be open with write intent to use LOCK_EX.