Hi Richard. Richard Heintze wrote: > > Sorry -- I was not quoting my own code precisely and I am using strict and > warnings. > I am using parenthesis. I attached the exact code for the subroutine below.
At the end of this post is my edited version of your program without line wraps. It compiles fine as I have posted it, and there are no reasons that I can see why your concatenation shouldn't work. The problems that I have are: - Your source layout allows a maximum line length of 196 characters. It's unlikely that you know what your source is doing off-screen, even if you think you do. Keep to something like an 80-character limit and all of the bugs will be on-screen at once. - Subroutines with more than two or three parameters are unlikely to be called correctly. 'FormElements' has seven, and to make matters worse there is a mixture of pass by value and pass by reference. - There is a mixture of qq() delimiters within the same subroutine. (Square bracket and pipe). It would be best to build these strings into a scalar variable as soon as its parameters are known instead of strewing the code with huge interpolated strings. I suspect that the bug is in the call to this routine, but first tidy up your code so that it /looks/ like it works. 'Here' documents would help to organise your strings instead of having long interpolated strings as subroutine parameters. Post your subroutine call. I'll lay $5 that your bug is there :) HTH, Rob # Reformatted source # sub FormElements { my ($me, $next, $ev_count, $curr_true, # integer array created in insert data $prob_innoc, $prob_guilt, $hidden) = @_; # The first time we view the Enter Probabilities page (display) # we have the option of specifing admissibility (the probability of the evidence being admissible in court) # and the probability the fact is true. # # When there are subsequent assertions or suspects, there is no need to allow the user to change this information # so we surpress the text edit box. # my $bReadOnly = !$me->bFirstSuspect(); # $me->{pass}==0 && $next==1; # Can the user change this? Yes, if this is the first Suspect/Assertion. my $t3 = $me->{admissibility}; my $admis = sprintf "%3d", $t3->[$ev_count]; print ($me->bShowAdmissibility()?(qq[ <TD ALIGN="CENTER" STYLE="font-family:serif; font-size:18px; font-weight: bold; background-color:#ffcc00">] .($bReadOnly?qq[$admis <INPUT class=debug READONLY TYPE=TEXT NAME=prob_admis$ev_count SIZE="2" VALUE="$admis" />]:qq[<INPUT TYPE=TEXT NAME=prob_admis$ev_count SIZE="2" VALUE="$admis" />]) ."</TD>"):""); print qq[<TD ALIGN="CENTER" STYLE="font-family:serif; font-size:18px; font-weight: bold; background-color:#ffcc00">]; # older code: $me->{base_type}=~"Rank" || $me->{base_type}=~"RA" || $me->{base_type}=~"Compare Assertions" # old code: ($me->{base_type} == &case_constants::btCompareAssertions || $me->{base_type} == &case_constants::btRankSuspects) if ($me->MultiSuspectCase() && $bReadOnly) { # No input box here! my $t2 = @{$$curr_true}[$ev_count]; # This is so wierd. Why do I need to explicitly cast it? $t2 = sprintf "%3.3f", ($t2<=0?0:$t2); my $t3 = qq[<INPUT class=debug TYPE=TEXT NAME="prob_true$ev_count" VALUE="$t2" SIZE=2>]; print $t2.$t3; # Why does not this concatenation work? $$hidden = $$hidden.qq[\n<TR class=debug><TD>prob_true$ev_count</TD><TD>$t3%</TD></TR>\n]; } else { # Input box: user can alter this print qq[ <INPUT TYPE="TEXT" ID="prob_true$ev_count" NAME="prob_true$ev_count" SIZE="7" OnChange="form_field_OnChange(this);" MAXLENGTH="6">%</TD> ]; } print qq| <TD ALIGN="CENTER" STYLE="font-family:serif; font-size:14px;background-color:#cc9900"> <INPUT ID="prob_guilt$ev_count" NAME="prob_guilt$ev_count" SIZE="7" OnChange="form_field_OnChange(this);" |; if ($me->{pass}!=1){ print qq| VALUE="|.($prob_guilt?$prob_guilt:"").qq|" |; } print qq| MAXLENGTH="6">%</TD> <TD ALIGN="CENTER" STYLE="font-family:serif; font-size:14px;background-color:#cc9900"> <INPUT TYPE="TEXT" ID="prob_innoc$ev_count" OnChange="form_field_OnChange(this);" NAME="prob_innoc$ev_count" SIZE="7" |; if ($me->{pass}!=1) { print qq|VALUE="|.($prob_innoc?$prob_innoc:"").qq|"|; } print " MAXLENGTH=6>%</TD>\n"; } -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]