Attribute::Tie - Tie via Attribute
use Attribute::Tie; my %hash : Tie('Hash::Yours', args ...); my @array : Tie('Array::Yours', args ...); my $scalar : Tie('Scalar::Yours', args ...);
Attribute::Tie allows you to tie variables via attribute. This is more intuitive than
tie my %hash, "Tie::Hash::Yours", args ... or die "$!";
The first argument to Tie() is the name of the module to which you want to tie the variable. You can omit 'Tie' therein.
Tie()
my %db : Tie('DB_File', ....); # ties to DB_File; my @fie : Tie('File', ...); # ties to Tie::File;
You do not have to use Tie::Whatever; Attribute::Tie does it for you.
use Tie::Whatever
I wrote this module for two reasons:
Attribute::Handlers offers an alternate approach via autotie. That looks like this.
use Attribute::Handlers autotie => { File => 'Tie::File' }; my @array : File('array.txt');
Which is handy but it hides the fact that the variable is actually tied. I want the attribute name to reflect what is really done to the variable.
unlike most attributes, tie-ing variable may fail. This is especially true for modules that tie variables to external files. But autotie does not trap the error; it just leaves the variable untied. Consider this.
tie
use Attribute::Handlers autotie => { File => 'Tie::File' }; my @array : File('/nonexistent/nowhere.txt');
Of course you can check the error like this.
tied(@array) or die $!
or this:
my @array : File('/nonexistent/nowhere.txt') or die $!;
First one is error-prone and the second one is unnatural because setting attribute is not assignment. When the error happens, it should croak before the attribute is 'set', or fails to be set.
On the other hand, Attribute::Tie dies on failure by default.
my @array : Tie('File', '/nonexistent/nowhere.txt'); # you die here!
By default, Attribute::Tie dies on failure as follows.
tie(%HASH, 'SDBM_File', ./_none_/db, 514, 438) failed : No such file or directory at t/04-error.t line 12
You can change this behavior via Attribute::Tie->seterror().
Attribute::Tie->seterror()
# sets the error handler Attribute::Tie->seterror(sub{ die @_ }); # disables error handling like Attribute::Handler's autotie Attribute::Tie->seterror(sub{}); Attribute::Tie->seterror(0); # restores default handler Attribute::Tie->seterror(1);
None by default.
perltie, Attribute::Handlers
Dan Kogai, <dankogai@dan.co.jp>
Copyright (C) 2006 by Dan Kogai
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.
To install Attribute::Tie, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Attribute::Tie
CPAN shell
perl -MCPAN -e shell install Attribute::Tie
For more information on module installation, please visit the detailed CPAN module installation guide.