use strict; use warnings; package Names; ########################################################################### # Rolf Rost, 14.2.2011 # Anonyme Array-Elemente bekommen Namen ########################################################################### use strict; # Setzt ein Array in ein Objekt um sub new{ my $class = shift; my $maps = shift; # {3 => 'Day', 4 => 'Month', 5 => 'Year'} my $aref = shift; # p.e. from localtime, stat, etc. return if ref $maps ne 'HASH'; return if ref $aref ne 'ARRAY'; my $self = {}; for(my $i = 0; $i < scalar(@$aref); $i++){ $self->{$maps->{$i}} = $aref->[$i] if exists $maps->{$i}; } return bless $self, $class; } 1; ######################################################################## package CSV; sub new{ my $class = shift; my $handle = shift; my $self = bless{ FH => $handle, COLS => { 0 => 'User', 1 => '/home', 2 => '/home/test', 3 => '/home/bin' }, DATA => {}, }, $class; $self->_deserialize; return $self; } ####################### PUBLIC ############################################ # Flags sub user_dir_flag{ my $self = shift; my $user = shift; my $dir = shift; return $self->{DATA}->{$user}->{$dir}; } ############################################# PRIVATE ##################### # Lesen der Daten auf eine Datenstruktur sub _deserialize{ my $self = shift; my $fh = $self->{FH}; while(my $line = <$fh>){ chomp $line; my @record = split ";", $line; my $name = Names->new($self->{COLS}, \@record); $self->{DATA}->{$record[0]} = $name; # Key ist der Benutzername } } 1;######################################################################### package main; my $ref = CSV->new(*DATA); print $ref->user_dir_flag('otto','/home'), "\n"; # 1 print $ref->user_dir_flag('otto','/home/test'), "\n"; # 0 print $ref->user_dir_flag('otto','/home/bin'), "\n"; # 0 __END__ user;/home;/home/test;/home/bin fritz;0;1;0 otto;1;0;0 hans;1;1;1