package MyTieFile; use strict; use warnings; use Tie::File; use Encode qw/encode decode/; use Carp; my @Tied; sub new { my $class=shift; my $filename=shift; my %args =@_; my %self; $self{filename}=$filename; if( exists($args{discipline}) ){ $self{encode}=$args{discipline}; if( $self{encode} =~ /\((.*)\)/){ $self{encode}=$1; } delete $args{discipline}; } tie(@Tied, 'Tie::File', $filename, %args) or confess 'tie @Tied failed'; return bless(\%self, $class); } sub get{ my $self=shift; my $idx=shift; return $self->{encode} ? decode($self->{encode}, $Tied[$idx]) : $Tied[$idx]; } sub set{ my $self=shift; my $idx=shift; my $val=shift; $Tied[$idx]= $self->{encode} ? encode($self->{encode}, $val) : $val; } sub max_index{ my $self=shift; return $#Tied; } sub DESTROY { my $self=shift; untie $self->{filename}; } 1;