Go to main content

Resource Management and Oracle® Solaris Zones Developer's Guide

Exit Print View

Updated: October 2017

Perl Interface to libexacct

Perl Interface Object Model

The Sun::Solaris::Exacct module is the parent of all the classes provided by the libexacct(3LIB) library. libexacct(3LIB) provides operations on types of entities: exacct format files, catalog tags, and exacct objects. exacct objects are subdivided into two types.

  • Items – Single data values

  • Groups – Lists of items

Benefits of Using the Perl Interface to libexacct

    The Perl extensions to extended accounting provide a Perl interface to the underlying libexacct(3LIB) API and offer the following enhancements:

  • Full equivalence to the C API that provides a Perl interface that is functionally equivalent to the underlying C API.

    The interface provides a mechanism for accessing exacct files that does not require C coding. All the functionality that is available from C is also available by using the Perl interface.

  • Ease of use.

    Data obtained from the underlying C API is presented as Perl data types. Perl data types ease access to the data and remove the need for buffer pack and unpack operations.

  • Automated memory management.

    The C API requires the programmer to take responsibility for managing memory when accessing exacct files. Memory management involves passing the appropriate flags to functions, such as ea_unpack_object(3EXACCT), and explicitly allocating buffers to pass to the API. The Perl API removes these requirements because all memory management is performed by the Perl library.

  • Prevent incorrect use of API.

    The ea_object_t structure provides the in-memory representation of exacct records. The ea_object_t structure is a union type that is used for manipulating both Group and Item records. As a result, an incorrectly typed structure can be passed to some of the API functions. The addition of a class hierarchy prevents this type of programming error.

Perl Double-Typed Scalars

The modules described in this document make extensive use of the Perl double-typed scalar facility. The double-typed scalar facility allows a scalar value to behave either as an integer or as a string depending upon the context. This behavior is the same as exhibited by the $! Perl variable (errno). The double-typed scalar facility avoids the need to map from an integer value into the corresponding string in order to display a value. The following example illustrates the use of double-typed scalars.

# Assume $obj is a Sun::Solaris::Item
my $type = $obj->type();

# prints out "2 EO_ITEM"
printf("%d %s\n", $type, $type);

# Behaves as an integer, $i == 2
my $i = 0 + $type;

# Behaves as a string, $s = "abc EO_ITEM xyx"
my $s = "abc $type xyz";