logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Data::UUID::LibUUID - uuid.h based UUID generation (versions 2 and 4 depending on platform)

Author

       Yuval Kogman <nothingmuch@woobling.org>

Description

       This module provides bindings for libuuid shipped with e2fsprogs or uuid-dev on debian, and also works
       with the system uuid.h on darwin.

Exports

       new_uuid_string $version
       new_uuid_binary $version
           Returns a new UUID in string (dash separated hex) or binary (16 octets) format.

           $version can be either 2, or 4 and defaults to whatever the underlying implementation prefers.

           Version  1  is  timestamp/MAC  based  UUIDs,  like  Data::UUID  provides.  They  reveal time and host
           information, so they may be considered a security risk.

           Version                   2                   is                    described                    here
           <http://www.opengroup.org/onlinepubs/9696989899/chap5.htm#tagcjh_08_02_01_01>.    It  is  similar  to
           version 1 but considered more secure.

           Version 4 is based just on random data. This is not guaranteed to be high quality  random  data,  but
           usually is supposed to be.

           On  MacOS  X  "getpid"  is  called  before UUID generation, to ensure UUIDs are unique accross forks.
           Behavior on other platforms may vary.

       uuid_to_binary $str_or_bin
           Converts a UUID from string or binary format to binary format.

           Returns undef on a non UUID argument.

       uuid_to_string $str_or_bin
           Converts a UUID from string or binary format to string format.

           Returns undef on a non UUID argument.

       uuid_eq $str_or_bin, $str_or_bin
           Checks if two UUIDs are equivalent. Returns true if they are, or false if they aren't.

           Returns undef on non UUID arguments.

       uuid_compare $str_or_bin, $str_or_bin
           Returns -1, 0 or 1 depending on the lexicographical order of the UUID.  This  works  like  the  "cmp"
           builtin.

           Returns undef on non UUID arguments.

       new_dce_uuid_string
       new_dce_uuid_binary
           These  two  subroutines  are a little hackish in that they take no arguments but also do not validate
           the arguments, so they can be abused as methods:

               package MyFoo;

               use Data::UUID::LibUUID (
                   new_dce_uuid_string => { -as "generate_uuid" },
               );

               sub yadda {
                   my $self = shift;
                   my $id = $self->generate_uuid;
               }

           This allows the ID generation code to be subclassed, but still keeps the hassle down  to  a  minimum.
           DCE is UUID version two specification.

       ascending_ident
           Creates a lexically ascending identifier containing a UUID, high resolution timestamp, and a counter.

           This  is  not a UUID (it's longer), but if you can store variable length identifier (and exposing the
           system clock is not an issue) they can be used to create  an  identifier  that  is  both  universally
           unique, and lexically increasing.

           Note  that  while  the identifiers are universally unique, there is no universal ordering (that would
           require  synchronization),  so  identifiers  generated  on  different  machines  or  even   different
           process/thread could have IDs which interleave.

Name

       Data::UUID::LibUUID - uuid.h based UUID generation (versions 2 and 4 depending on platform)

See Also

       Data::GUID, Data::UUID, UUID, <http://e2fsprogs.sourceforge.net/>

Synopsis

           use Data::UUID::LibUUID;

           my $uuid = new_uuid_string();

Todo

       •   Consider bundling libuuid for when no system "uuid.h" exists.

Version Control

       This    module    is    maintained    using    Darcs.    You    can   get   the   latest   version   from
       <http://nothingmuch.woobling.org/code>, and use "darcs send" to commit changes.

See Also