in reply to insert CGI script in single quotes. [SOLVED]

Please use <code> tags to post perl code at this site. See Markup in the Monastery.

If the code you used looks like:

while (my @row_array = $sth->fetchrow_array()) { print <<EOF; <tbody> <tr> <td> $row_array[0] </td> <td> $row_array[1] </td> <td> $row_array[2] </td> ... </tr> </tbody> EOF }
then the only way you could have got the output you did is if the database actually contained the record
$row_array[0] $row_array[1] $row_array[2] ...
So - it would help if you posted brief DB content information as well.

        This is not an optical illusion, it just looks like one.

Replies are listed 'Best First'.
Re^2: insert CGI script in single quotes.
by pakeidoprek (Novice) on Apr 26, 2016 at 08:52 UTC
    i have try some suggested by friend, and i got a same problem. the real problem is, how can i use a while function in single quotes. my db have contained a record, but i have fail to call it in single quotes function. :)

      What do you mean by "single quotes function"? It will help us if you can post the problematic loop with the function, ideally together with the data you want to pass to it. Something like the following:

      #!perl -w use strict; # This would come from the database my @data = ( ['Hello','World',1,2,3,4,5], ['Hello','Pakeidoprek,6,7,8,9,0], ); while( my $item = shift @data) { ... problematic part ... };

        i have parameter content in my modules, and i want to use it in my web page to insert cgi script. the sample of codes like this :

        #subroutines sub content; #parameter in modules template my ($self,$content=,) = @_; #scalar placing content my $html = ''; #body content $html .='<div>'; $html .=''.$content.''; $html .='</div>'; #
        # i used the parameter in my web content with single quotes .. print MODULES::template->content('XXX'); ..

        the XXX is this :

        print <<EOF; <thead class="flip-content"> <tr> <th width="20%"> Students id </th> <th class="numeric"> First Name </th> <th class="numeric"> Last Name </th> <th class="numeric"> Date Of Birth </th> <th class="numeric"> Year In </th> <th class="numeric"> Password </th> <th class="numeric"> Email </th> <th class="numeric"> Telepon </th> </tr> </thead> EOF while (my @row_array = $sth->fetchrow_array()) { print <<EOF; <tbody> <tr> <td> $row_array[0] </td> <td> $row_array[1] </td> <td> $row_array[2] </td> <td> $row_array[3] </td> <td> $row_array[4] </td> <td> $row_array[5] </td> <td> $row_array[6] </td> <td> $row_array[7] </td> </tr> </tbody> EOF } print"</table>";

      The code you posted in your original node works fine.

      It sounds like you want it to continue to work with a single-quoted "heredoc", i.e.:

      print <<'EOF';
      By doing that, you are defeating interpolation.

      May I suggest an alternative , more efficient (for the programmer) syntax to get the results you want, while avoiding the "heredoc" syntax that you are having trouble with :

      use CGI; my $q = CGI::->new(); print $q->start_table($q->caption("table Caption")), "\n", $q->thead({-class=>"flip-content"}, $q->Tr($q->td({-width=>"20%"},"Students id") , map {$q->td({-class=>"numeric"}, $_). "\n"} ("First Name", "Last Name", "Date Of Birth", "Year In", "Password", "Email","Telepon") )), "\n", $q->start_tbody(),"\n"; while (my @row_array = $sth->fetchrow_array()){ print $q->Tr( map {$q->td($_) . "\n"} @row_array ),"\n"; } print $q->end_tbody(),"\n",$q->end_table(),"\n";
      There are better alternatives if you use one of the "template" modules, but this should get you started.

              This is not an optical illusion, it just looks like one.

        wow it's great format. i will try it sir :)