my %userData; open(inData, $data); while () { chomp; $line = $_; if ($line =~/^GC/){ my $ACTNUM = substr $line, 11, 9 ; my $ref = substr $line, 0, 3 ; $userData{$ACTNUM}{$ref} = $line; } } for my $ACTNUM (sort keys %userData) { $line = $userData{$ACTNUM}{GCA}; $ACCTNUM = substr $line, 11, 9; $FIRM_ID = substr $line, 660, 1; $CURR = substr $line, 661, 3; print "$CURR,$ACCTNUM,$FIRM_ID\n"; } #### This prints out what I want via Dumper: my $data = "GCUS.GCUS";my %userData;open(inData, $data);while () { chomp; $line = $_; if ($line =~/^GC/){ my $ACTNUM = substr $line, 11, 9 ; my $ref = substr $line, 0, 3 ; push @{ $userData{$ACTNUM} }, $ref = $line; } } Here is where I get stuck and cant seem to understand the perl doc: for $ACTNUM (sort keys %userData) { #########GCA############## my $line = $userData{$ACTNUM}{GCA}; $ACCTNUM = substr $line, 11, 9; $FIRM_ID = substr $line, 660, 1; $CURR = substr $line, 661, 3;