NAME

OSSP::uuid – OSSP uuid Perl Binding  

DESCRIPTION

OSSP uuid is a ISO-C:1999 application programming interface (API) and corresponding command line interface (CLI) for the generation of DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant Universally Unique Identifier (UUID). It supports DCE 1.1 variant UUIDs of version 1 (time and node based), version 3 (name based, MD5), version 4 (random number based) and version 5 (name based, SHA-1). Additional API bindings are provided for the languages ISO-C++:1998, Perl:5 and PHP:4/5. Optional backward compatibility exists for the ISO-C DCE-1.1 and Perl Data::UUID APIs.

OSSP::uuid is the Perl binding to the OSSP uuid API. Three variants are provided:  

TIE-STYLE API

The TIE-style API is a functionality-reduced wrapper around the OO-style API and intended for very high-level convenience programming:
"use OSSP::uuid;"
tie" my $uuid, ‘OSSP::uuid::tie’, $mode, …;"
"$uuid = [ $mode, … ];"
"print "UUID=$uuid\n";"
"untie $uuid;"
 

OO-STYLE API

The OO-style API is a wrapper around the C-style API and intended for high-level regular programming.
"use OSSP::uuid;"
"my $uuid = "new" OSSP::uuid;"
"$uuid->"load"($name);"
"$uuid->"make"($mode, …);"
"$result = $uuid->"isnil"();"
"$result = $uuid->"compare"($uuid2);"
"$uuid->"import"($fmt, $data_ptr);"
"$data_ptr = $uuid->"export"($fmt);"
"[(]$str[, $rc)] = $uuid->"error"();"
"$ver = $uuid->"version"();"
"undef $uuid;"

Additionally, the strings "v1", "v3", "v4", "v5" and "mc" can be used in $mode and the strings "bin", "str", and "txt" can be used for $fmt.  

C-STYLE API

The C-style API is a direct mapping of the OSSP uuid ISO-C API to Perl and is intended for low-level programming. See uuid(3) for a description of the functions and their expected arguments.
"use OSSP::uuid qw(:all);"
"my $uuid; $rc = "uuid_create"($uuid);"
"$rc = "uuid_load"($uuid, $name);"
"$rc = "uuid_make"($uuid, $mode, …);"
"$rc = "uuid_isnil"($uuid, $result);"
"$rc = "uuid_compare"($uuid, $uuid2, $result);"
"$rc = "uuid_import"($uuid, $fmt, $data_ptr, $data_len);"
"$rc = "uuid_export"($uuid, $fmt, $data_ptr, $data_len);"
"$str = "uuid_error"($rc);"
"$ver = "uuid_version"();"
"$rc = "uuid_destroy"($uuid);"

Additionally, the following constants are exported for use in $rc, $mode, $fmt and $ver:

"UUID_VERSION", "UUID_LEN_BIN", "UUID_LEN_STR", "UUID_RC_OK", "UUID_RC_ARG", "UUID_RC_MEM", "UUID_RC_SYS", "UUID_RC_INT", "UUID_RC_IMP", "UUID_MAKE_V1", "UUID_MAKE_V3", "UUID_MAKE_V4", "UUID_MAKE_V5", "UUID_MAKE_MC", "UUID_FMT_BIN", "UUID_FMT_STR", "UUID_FMT_SIV", "UUID_FMT_TXT".  

EXAMPLES

The following two examples create the version 3 UUID "02d9e6d5-9467-382e-8f9b-9300a64ac3cd", both via the OO-style and the C-style API. Error handling is omitted here for easier reading, but has to be added for production-quality code.

  #   TIE-style API (very high-level)
  use OSSP::uuid;
  tie my $uuid, ‘OSSP::uuid::tie’;
  $uuid = [ "v1" ];
  print "UUIDs: $uuid, $uuid, $uuid\n";
  $uuid = [ "v3", "ns:URL", "http://www.ossp.org/" ];
  print "UUIDs: $uuid, $uuid, $uuid\n";
  untie $uuid;

  #   OO-style API (high-level)
  use OSSP::uuid;
  my $uuid    = new OSSP::uuid;
  my $uuid_ns = new OSSP::uuid;
  $uuid_ns->load("ns:URL");
  $uuid->make("v3", $uuid_ns, "http://www.ossp.org/");
  undef $uuid_ns;
  my $str = $uuid->export("str");
  undef $uuid;
  print "$str\n";

  #   C-style API (low-level)
  use OSSP::uuid qw(:all);
  my $uuid;    uuid_create($uuid);
  my $uuid_ns; uuid_create($uuid_ns);
  uuid_load($uuid_ns, "ns:URL");
  uuid_make($uuid, UUID_MAKE_V3, $uuid_ns, "http://www.ossp.org/");
  uuid_destroy($uuid_ns);
  my $str; uuid_export($uuid, UUID_FMT_STR, $str, undef);
  uuid_destroy($uuid);
  print "$str\n";

 

Willie has over 15 years of experience in Linux system administration and DevOps. After managing infrastructure for startups and enterprises alike, he founded Command Linux to share the practical knowledge he wished he had when starting out. He oversees content strategy and contributes guides on server management, automation, and security.