2017-05-24 4 views
0

Dans cette partie de perl cgi, le code $ _ variable n'a pas réussi à imprimer son contenu à l'intérieur de la balise en utilisant perl cgi?Subroutine ne parvient pas à prendre les variables à l'intérieur de tag td en utilisant Perl CGI?

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 
} 

Description:

  1. Pour lire les @mots encore et encore je l'avais utilisé foreach @mots loop.Here sont lues à partir du sous-programme précédent. J'ai essayé de charger le même contenu de tableau dans la balise. Mais à partir de mon code, ça ne va pas dans le foreach? A cause de quelle erreur il ne charge pas son contenu.

Sortie prévue:

De CHARGER1 $, il a obtenu le résultat suivant:

hardware 
software 
os 

donc j'ai essayé de l'imprimer dans le tableau-à-dire à l'intérieur tag donc j'avais utilisé la boucle foreach prendre par défaut valeur.

Maintenant je mes sortie devrait être la suivante:

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

Ce n'est pas votre vrai code. Il a des erreurs de syntaxe. Veuillez inclure votre ** code réel **! Et pendant que vous y êtes, veuillez également inclure des exemples de données pour reproduire le problème et expliquer quelle sortie vous attendez. – simbabque

+0

le code réel est trop grand c'est pourquoi j'avais ajouté la partie du code où il montre le problème. @simbabque –

+0

a ajouté la sortie attendue. @simbabque –

Répondre

1

Le marqueur EOF pour le heredoc doit être tout le chemin à gauche. Il ne peut pas avoir d'espace blanc. À cause de cela, il devrait y avoir une erreur de syntaxe parce que le reste de votre code n'est pas reconnu comme code par l'analyseur.

Cela devrait ressembler à ça.

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 

} 

Les HEREDOC indentés seront probablement disponibles avec Perl 5.26. Une nouvelle fonctionnalité a été publiée avec la version de développement 5.25.7 qui introduit une nouvelle syntaxe <<~"EOF". Mais vous n'avez probablement pas cette version, ou une version plus récente.


En plus de cela, vous mettez le premier argument de la fonction dans $load, mais aussi en @words. C'est probablement faux. Cela devrait être my ($load, @words) = @_.

+0

Après l'indentation aussi je trouve le même problè[email protected] –

+0

ajouté sortie attendue @simbabque –

+0

pourquoi le n'est pas fermé à l'intérieur de la boucle foreach @simbabque –