ossp-pkg/uuid/perl/uuid.pod
##
## OSSP uuid - Universally Unique Identifier
## Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
## Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
##
## This file is part of OSSP uuid, a library for the generation
## of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
##
## Permission to use, copy, modify, and distribute this software for
## any purpose with or without fee is hereby granted, provided that
## the above copyright notice and this permission notice appear in all
## copies.
##
## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
## SUCH DAMAGE.
##
## uuid.pod: Perl Binding (Perl/POD part)
##
=pod
=head1 NAME
OSSP::uuid - B<OSSP uuid> Perl Binding
=head1 DESCRIPTION
B<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 I<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.
B<OSSP::uuid> is the Perl binding to the B<OSSP uuid> API.
Three variants are provided:
=head2 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:
=over 4
=item C<use OSSP::uuid;>
=item B<tie>C< my $uuid, 'OSSP::uuid::tie', $mode, ...;>
=item C<$uuid = [ $mode, ... ];>
=item C<print "UUID=$uuid\n";>
=item C<untie $uuid;>
=back
=head2 OO-STYLE API
The OO-style API is a wrapper around the C-style API and intended for
high-level regular programming.
=over 4
=item C<use OSSP::uuid;>
=item C<my $uuid = >B<new>C< OSSP::uuid;>
=item C<$uuid-E<gt>>B<load>C<($name);>
=item C<$uuid-E<gt>>B<make>C<($mode, ...);>
=item C<$result = $uuid-E<gt>>B<isnil>C<();>
=item C<$result = $uuid-E<gt>>B<compare>C<($uuid2);>
=item C<$uuid-E<gt>>B<import>C<($fmt, $data_ptr);>
=item C<$data_ptr = $uuid-E<gt>>B<export>C<($fmt);>
=item C<[(]$str[, $rc)] = $uuid-E<gt>>B<error>C<();>
=item C<$ver = $uuid-E<gt>>B<version>C<();>
=item C<undef $uuid;>
=back
Additionally, the strings C<"v1">, C<"v3">, C<"v4">, C<"v5"> and C<"mc">
can be used in C<$mode> and the strings C<"bin">, C<"str">, and C<"txt">
can be used for C<$fmt>.
=head2 C-STYLE API
The C-style API is a direct mapping
of the B<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.
=over 4
=item C<use OSSP::uuid qw(:all);>
=item C<my $uuid; $rc = >B<uuid_create>C<($uuid);>
=item C<$rc = >B<uuid_load>C<($uuid, $name);>
=item C<$rc = >B<uuid_make>C<($uuid, $mode, ...);>
=item C<$rc = >B<uuid_isnil>C<($uuid, $result);>
=item C<$rc = >B<uuid_compare>C<($uuid, $uuid2, $result);>
=item C<$rc = >B<uuid_import>C<($uuid, $fmt, $data_ptr, $data_len);>
=item C<$rc = >B<uuid_export>C<($uuid, $fmt, $data_ptr, $data_len);>
=item C<$str = >B<uuid_error>C<($rc);>
=item C<$ver = >B<uuid_version>C<();>
=item C<$rc = >B<uuid_destroy>C<($uuid);>
=back
Additionally, the following constants are exported for use in C<$rc>, C<$mode>, C<$fmt> and C<$ver>:
C<UUID_VERSION>,
C<UUID_LEN_BIN>,
C<UUID_LEN_STR>,
C<UUID_RC_OK>,
C<UUID_RC_ARG>,
C<UUID_RC_MEM>,
C<UUID_RC_SYS>,
C<UUID_RC_INT>,
C<UUID_RC_IMP>,
C<UUID_MAKE_V1>,
C<UUID_MAKE_V3>,
C<UUID_MAKE_V4>,
C<UUID_MAKE_V5>,
C<UUID_MAKE_MC>,
C<UUID_FMT_BIN>,
C<UUID_FMT_STR>,
C<UUID_FMT_SIV>,
C<UUID_FMT_TXT>.
=head1 EXAMPLES
The following two examples create the version 3 UUID
C<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";
=head1 SEE ALSO
uuid(1), uuid-config(1), uuid(3).
=head1 HISTORY
The Perl binding B<OSSP::uuid> to B<OSSP uuid> was implemented in
November 2004 by Ralf S. Engelschall E<lt>rse@engelschall.comE<gt>.
=cut