my $equation=`type postfix.txt`; my @postfix = split /,/,$equation; $|=1; ## MULTIPLY THROUGH ############################################### my @result; my $idxresult=0; for ( my $j=0; $j<=$#postfix; $j++) { my $a=$postfix[$j]; printf("\n\n$j of $#postfix %02.2f\n",($j/$#postfix)*100); my $result; if ($a eq 'x' ) { print "Multiply top 2 through:"; print "BEFORE STACK:\n"; for (my $j=$idxresult; $j>0; $j--) { print " $j: ",length($result[$j]),"\n"; # print " $j: $result[$j]\n"; } my @r1=split /\+/, $result[$idxresult--]; my @r2=split /\+/, $result[$idxresult]; my $mcnt = scalar @r1 * scalar @r2; print "$mcnt ",scalar @r1, " X ", scalar @r2, "\n"; #print "$mcnt (@r1) BY (@r2)\n"; my @tmpresult; ## ARRAY METHOD 60 TO 1 FASTER THAN SINGLE STRING my $t2=0; foreach my $r1 (@r1) { foreach my $r2 (@r2) { $tmpresult[$t2]= "$r2,$r1"; $t2++; } } #print "RESULT STACK $idxresult",length($result[$idxresult]); print "AFTER STACK:\n"; for (my $j=$idxresult; $j>0; $j--) { print " $j: ",length($result[$j]),"\n"; # print " $j: $result[$j]\n"; } print "ELEMENTS: $#tmpresult\n"; ### vvvvvv ##THE JOIN BELOW FAILS #### $result= join('+',@tmpresult); ### ^^^^^ ## THE JOIN ABOVE FAILS #### $result[$idxresult]=$result; delete($result[$idxresult+1]); } elsif ($a eq '+' ) { print "+ LINK TOP 2 ELEMENTS\n"; $idxresult--; $result[$idxresult].= '+' . "$result[$idxresult+1]"; } elsif ( $a =~ /\d+/ ) { print "ADD VAR: $a\n"; $idxresult++; $result[$idxresult]=$a; } print "STACK:\n"; for (my $j=$idxresult; $j>0; $j--) { print " $j: ",length($result[$j]),"\n"; # print " $j: $result[$j]\n"; } # if ($j % int($#prefix * .01) == 0) { # printf("\n\nProcessed:%d\%\n",int(($j/$#prefix)*100)); # } } if ($idxresult != 1 ) { print "E: Not everything processed. $idxresult items in the stack.\n"; } print "ALL PATHS FORM: $result[$idxresult]\n";