If I'm not sure whether or not flock will work, I usually use a workaround by renaming the file I want to have access to. Of course this depends on rename being "atomic", meaning: There is no point in time while renaming, where both filenames exists and rename may be halted.
so my code looks something like this:
my $cntr="counterfile";
my $owncntr="counter.mine";
while (! rename $cntr,$owncntr) {
# sleep some time to retry
# or die if no more retries allowed
}
# do some work on file $owncntr
if (! rename $owncntr,$cntr ) die "Someone created a new $cntr file?";