my @sciDbRows; my @hkDbRows; my @ancDbRows; my %dbFileArray = ( 'sci' => \@sciDbRows, 'hk' => \@hkDbRows, 'anc' => \@ancDbRows ); sub open1 { my $dbPath = '/home/user/SciPtrLoc.db'; use Fcntl 'O_RDWR', 'O_CREAT'; tie @sciDbRows, 'Tie::File', $dbPath, mode => O_RDWR | O_CREAT or die; } sub write1 { my $part = 'sci'; my $ref = $dbFileArray{ 'sci' }; my @rows = @$ref; my $oneRec = "asdfg"; push(@rows, $oneRec); # does NOT work push(@{$dbFileArray{ $part }}, $oneRec); #does work $oneRec = "qwerty"; push(@sciDbRows, $oneRec); # does work } open1(); write1(); #### $rows[$index] = "new value"; #### @{$dbFileArray{ $part }}[$index] = "new value";