in reply to Renaming an image file

Why not avoid all the potential (though unlikely) issues of non-unique pseudo-random numbers and hash collisions - just use the start time of the script ($^T) as a base index, and increment from there. And if you restart the script, it won't collide with any names from before.

Replies are listed 'Best First'.
Re^2: Renaming an image file
by afoken (Chancellor) on Nov 28, 2010 at 12:14 UTC
    ... use the start time of the script ($^T) as a base index, and increment from there. And if you restart the script, it won't collide with any names from before

    How much would you like to bet on that idea?

    $^T has second resolution. Start the script at some point T in time. $filename=T at start of script. Process 100 files in 60 seconds, with $filename++ for each file. $filename=T+100 at end of script. Start again for the next set of files at T+65 seconds. First $filename=$^T=T+65. Instant collision.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
      OK, flaw in my logic there - which you could have simply pointed out without the challenge to a bet. Hope you feel superior now.

      The point of my original post is that there may be a sufficiently simple way of doing it, without resorting to databases or with the caveats associated with random numbers and hashing.

      Maybe the Time::HiRes module would be an option - microsecond resolution, if available, should be enough:

      use strict; use warnings; use Time::HiRes qw(gettimeofday); my($seconds, $microseconds); my $index; for (1..10) { ($seconds, $microseconds) = gettimeofday; $index = sprintf("%d%06d", $seconds, $microseconds); print "$index\n"; }

      Output:

      1290951829553400 1290951829553437 1290951829553448 1290951829553457 1290951829553467 1290951829553477 1290951829553487 1290951829553496 1290951829553505 1290951829553515

        And what happens if the site where these images are being uploaded is, or becomes, a FaceBook or Flickr?

        Or any site that has multiple upload servers; and/or uses threaded servers.

        Now any scheme that tries to use upload time--even to the microsecond; and with or without combination with current pid--is almost guaranteed to create duplicates.

      easy to fix :)
      $^T . rand($^T) . $$ $^T . int( rand($^T) ) . $$
      heck you could even append
      crypt $^T.$$.$^T, rand($^T)