2017-05-24 3 views
0

perl cgi code $ _ variableのこの部分では、perl cgiを使用してそのタグの内容を出力できませんでしたか?サブルーチンはperl cgiを使用してtdタグ内の変数を取ることができませんか?

sub do_work { 
    my $fh = shift; 
    my $content;  

    while (my $line= <$fh>) { 
     my @name1 = grep {$_ =~ m/^\[/} $line; 
     s/\W//g for @name1; 
     $content .= join '', @name1; 
    } 

    return $content; 
} 

sub do_task { 
    my $fh = shift; 
    my $load; 
    while(my $firstline = <$fh>) { 
     $firstline =~ s/.*=//g; 
     my @words = split /,., $firstline; 
     my $add = 0; 
     $load1 .= join("\n", @words); 
    } 

    return $load1; 
} 

sub layout { 
    my ($load, @words = @_; 
    my $add = 0; 

    print << "EOF"; 
    <html><body><table> 
    <tr> 
    <th>s.no</th> 
    <th>name</th> 
    </tr> 
    EOF 

    foreach(@words) { 
     $add++; 
     print<<"EOF" 
     <tr> 
     <td>$add</td> 
     <td>$_</td> 
    EOF 
    } 

    print <<"EOF" 
    </table></body></html> 
    EOF 
} 

説明:

  1. 私はforeachのloop.Hereの@wordsが前のサブルーチンから読み込まれます使用していた何度も何度も@wordsを読むために。同じ配列の内容をタグにロードしようとしました。しかし、私のコードからforeachに入ることはありませんか?どのような間違いのために内容を読み込んでいません。出力期待

:$ LOAD1から

をそれが次の出力を得た:

hardware 
software 
os 

だから、私はデフォルトを取るためにforeachループを使用していたように、タグの中に、すなわちテーブルにそれを印刷してみました値。

s.no name 
1  Hardware 
2  Software 
3  os 
+1

これは実際のコードではありません。構文エラーがあります。あなたの**本当のコード**を含めてください!また、問題を再現するためのサンプルデータを含め、期待する出力を説明してください。 – simbabque

+0

実際のコードが大きすぎて、なぜ問題を示しているコードの部分を追加したのですか? @simbabque –

+0

は予想される出力を追加しました。 @simbabque –

答えて

1

ヒアドキュメントについてEOFマーカーは、左のすべての方法にする必要がある:

今、私は次のように私の出力があるべき期待しています。先行する空白を持つことはできません。そのため、残りのコードはパーサによってコードとして認識されないため、構文エラーが発生するはずです。

このようになります。

sub layout 
{ 

    my($load)[email protected]_; 
    my @[email protected]_; 
    my $add=0; 
    print << "EOF"; 
    <html><body><table> 
    <tr> 
    <th>s.no</th> 
    </tr> 
EOF 

    foreach(@words) 
    { 
    $add++; 
    print<<"EOF" 
    <tr> 
    <td>$add</td> 
    <td>$_</td> 
EOF 

    } 
    print <<"EOF" 
    </table></body></html> 
EOF 

} 

インデントヒアドキュメントは、おそらくPerlの5.26で利用できるようになります。新機能は、5.25.7開発版でリリースされ、新しい構文<<~"EOF"が導入されました。しかし、あなたはおそらくそのバージョンを持っていない、または新しいバージョンです。


はそれに加えて、あなたはだけでなく、 @wordsに、 $loadに関数の最初の引数を入れています。それはおそらく間違っている。それは my ($load, @words) = @_でなければなりません。

+0

インデント後も同じ問題が発生します。@simbabque –

+0

が期待出力を追加しました –

+0

がforeachループ内で閉じられないのはなぜですか? –

関連する問題