perlquestion
BazB
<p>Greetings once again, fellow Monks.</p>
<p>
I have some code which forks a number of children to carry out a number of tasks in parallel.<br />
Each child calls [CPAN://File::Temp]::tempfile() to create a temporary file and some (non-perl) code is written to the temporary file and the filehandle closed.
An external command is then called to execute the code in the temporary files.
</p>
<p>
The code regularly fails to create a unique filename - [CPAN://File::Temp] croaks after 10 attempts to guess another unique name (the 10 attempts is a constant hardcoded in the module's source).<br />
After rummaging around in [CPAN://File::Temp]'s guts and inserting some print statements for debugging, it seems that each of children try to use the same strings for the temporary filename(s).
</p>
<p>
I've worked around this by modifying File::Temp to include the process ID (<code>$$</code>) on the end of any filenames, but I feel this is a less-than-ideal solution.<br />
Security and/or paranoia isn't a primary concern, so having process IDs in filenames doesn't worry me too much.
</p>
<p>
Could someone explain to me why the randomness of the temporary filenames in multiple processes isn't exactly random and suggest any other solutions/hacks to workaround the problem?
</p>
<p>
Cheers,<br /><br /> [BazB].
</p>
<!-- Node text goes above. Div tags should contain sig only -->
<div class="pmsig"><div class="pmsig-127547">
<hr />
<font size=1>
<p align=right>If the information in this post is inaccurate, or just plain wrong, don't just downvote - please post explaining what's wrong.<br>
That way everyone learns.</p>
</font>
</div></div>