NAME
Module::Generic::Dynamic - Dynamic Object Class
SYNOPSIS
package My::Module;
use parent qw( Module::Generic::Dynamic );
# Then, instantiating an object
my $object = My::Module->new({
name => $some_name,
quantity => 20,
metadata => $some_hash_reference,
tags => [qw( product entrepreneurship capital )],
});
# Then the methods corresponding to the data keys can be accessed
my $product_name = $object->name
# etc
VERSION
v1.2.4
DESCRIPTION
The purpose of this class/package is to provide a framework to create dynamically created class/package.
For more granular control over the method to be used for each data key-value, use "_set_get_class" in Module::Generic
METHODS
new
Provided with an hash reference of data, this will create dynamically a class based on the class/pacakge name used to call new
It will then associate helper method sbased on the data type for each key of the hash reference. Precisely:
hash
This would create method after the key name and a new class also based on the key name, and use the helper method "_set_get_object" in Module::Generic
array
If the array contains hash references, this will create a new class/package dynamically and create an object for each hash reference in the array using "_set_get_object_array" in Module::Generic
Otherwise, it will create the method using "_set_get_array" in Module::Generic
string
This would create a method using the helper method "_set_get_scalar" in Module::Generic
boolean
This would create a method using the helper method "_set_get_boolean" in Module::Generic
SERIALISATION
Serialisation by CBOR, Sereal and Storable::Improved (or the legacy Storable) is supported by this package. To that effect, the following subroutines are implemented: FREEZE
, THAW
, STORABLE_freeze
and STORABLE_thaw
THREAD SAFETY WARNING
This module is not thread-safe.
Module::Generic::Dynamic
dynamically creates packages and injects methods into symbol tables at runtime using eval
. In multi-threaded environments (Perl ithreads), this can cause:
Race conditions between threads attempting to create the same symbol
Corrupted symbol tables if a method is installed while another thread is reading or writing from the same class
Recommended Usage
Use this module only during application initialization, before any threads are spawned.
Avoid invoking
new()
or triggeringAUTOLOAD()
from within a thread.If used in a persistent environment (like mod_perl), precompile structures at startup.
AUTHOR
Jacques Deguest <jack@deguest.jp>
COPYRIGHT & LICENSE
Copyright (c) 2000-2024 DEGUEST Pte. Ltd.
You can use, copy, modify and redistribute this package and associated files under the same terms as Perl itself.