NAME

Attribute::TieClasses - attribute wrappers for CPAN Tie classes

SYNOPSIS

use Attribute::TieClasses;
my $k : Timeout(EXPIRES => '+2s');
# loads in Tie::Scalar::Timeout and tie()s $k with those options

DESCRIPTION

Damian Conway's wonderful Attribute::Handlers module provides an easy way to use attributes for tie()ing variables. In effect, the code in the synopsis is simply

use Attribute::Handlers
    autotie => { Timeout => 'Tie::Scalar::Timeout' };

Still, going one step further, it might be useful to have centrally defined attributes corresponding to commonly used Tie classes found on CPAN.

Simply use()ing this module doesn't bring in all those potential Tie classes; they are only loaded when an attribute is actually used.

The following attributes are defined:

Attribute name(s)  Variable ref  Class the variable is tied to
=================  ============  =============================
Alias              HASH          Tie::AliasHash
Aliased            HASH          Tie::AliasHash
Cache              HASH          Tie::Cache
CharArray          ARRAY         Tie::CharArray
Counter            SCALAR        Tie::Counter
Cycle              SCALAR        Tie::Cycle
DBI                HASH          Tie::DBI
Decay              SCALAR        Tie::Scalar::Decay
Defaults           HASH          Tie::HashDefaults
Dict               HASH          Tie::TieDict
Dir                HASH          Tie::Dir
DirHandle          HASH          Tie::DirHandle
Discovery          HASH          Tie::Discovery
Dx                 HASH          Tie::DxHash
Encrypted          HASH          Tie::EncryptedHash
FileLRU            HASH          Tie::FileLRUCache
Fixed              HASH          Tie::SubstrHash
FlipFlop           SCALAR        Tie::FlipFlop
IPAddrKeyed        HASH          Tie::NetAddr::IP
Insensitive        HASH          Tie::CPHash
Ix                 HASH          Tie::IxHash
LDAP               HASH          Tie::LDAP
LRU                HASH          Tie::Cache::LRU
ListKeyed          HASH          Tie::ListKeyedHash
Math               HASH          Tie::Math
Mmap               ARRAY         Tie::MmapArray
NumRange           SCALAR        Tie::NumRange
NumRangeWrap       SCALAR        Tie::NumRangeWrap (in Tie::NumRange)
Offset             ARRAY         Tie::OffsetArray
Ordered            HASH          Tie::LLHash
PackedInt          ARRAY         Tie::IntegerArray
PerFH              SCALAR        Tie::PerFH
Persistent         HASH          Tie::Persistent
RDBM               HASH          Tie::RDBM
Range              HASH          Tie::RangeHash
RangeKeyed         HASH          Tie::RangeHash
Rank               HASH          Tie::Hash::Rank
Ranked             HASH          Tie::Hash::Rank
Ref                HASH          Tie::RefHash
Regexp             HASH          Tie::RegexpHash
RegexpKeyed        HASH          Tie::RegexpHash
Secure             HASH          Tie::SecureHash
Sentient           HASH          Tie::SentientHash
Shadow             HASH          Tie::ShadowHash
Shadowed           HASH          Tie::ShadowHash
Sort               HASH          Tie::SortHash
Sorted             HASH          Tie::SortHash
Strict             HASH          Tie::StrictHash
Substr             HASH          Tie::SubstrHash
TextDir            HASH          Tie::TextDir
Timeout            SCALAR        Tie::Scalar::Timeout
Toggle             SCALAR        Tie::Toggle
Transact           HASH          Tie::TransactHash
TwoLevel           HASH          Tie::TwoLevelHash
Vec                ARRAY         Tie::VecArray
Vector             ARRAY         Tie::VecArray
WarnGlobal         SCALAR        Tie::WarnGlobal::Scalar

I haven't had occasion to test all of these attributes; they were taken from the module descriptions on CPAN. For some modules where the name didn't ideally translate into an attribute name (e.g., Tie::NetAddr::IP), I have taken some artistic liberty to create an attribute name. Some tie classes require the use of the return value from tie() and are as such not directly usable by this mechanism, AFAIK.

No censoring has been done as far as possible; there are several attributes that accomplish more or less the same thing. TIMTOWTDI.

If you want any attribute added or renamed or find any mistakes or omissions, please contact me at <marcel@codewerk.com>.

EXAMPLES

    # Tie::Scalar::Timeout
    my $m : Timeout(NUM_USES => 3, VALUE => 456, POLICY => 777);
    print "$m\n" for 1..5;

    # Tie::Hash::Rank
    my %scores : Ranked;
    %scores = (
	Adams   => 78,
	Davies  => 35,
	Edwards => 84,
	Thomas  => 47
    );
    print "$_: $scores{$_}\n" for qw(Adams Davies Edwards Thomas);

    # Tie::FlipFlop;
    my $ff : FlipFlop(qw/Red Green/);
    print "$ff\n" for 1..5;

BUGS

None known so far. If you find any bugs or oddities, please do inform the author.

AUTHOR

Marcel Grünauer, <marcel@codewerk.com>

COPYRIGHT

Copyright 2001 Marcel Grünauer. All rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

perl(1), Attribute::Handlers(3pm).