This section provides information about the following topics:
See also the libexacct(3LIB) man page.
The Sun::Solaris::Exacct module is the parent of all the classes provided by the libexacct library. The libexacct library provides operations on types of entities: exacct format files, catalog tags, and exacct objects. The exacct objects are subdivided into two types:
Items – Single data values
Groups – Lists of items
The Perl extensions to extended accounting provide a Perl interface to the underlying libexacct API and offer the following enhancements:
Full functional equivalence 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 the ea_unpack_object function, 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.
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";