Question

Ceci est une question débutant-les meilleures pratiques en Perl. Je suis nouveau dans cette langue. La question est:

Si je veux traiter les lignes de sortie d'un programme, comment puis-je formater la première ligne d'une manière spéciale?

Je pense à deux possibilités:

1) Une variable de drapeau, une fois que la boucle est exécutée première fois est activé. Mais il sera évalué pour chaque cycle. solution BAD

2) Une boucle indexée (comme un « pour »). Ensuite, je commencerais la boucle i = 1. Cette solution est beaucoup mieux. Le problème est COMMENT PUIS-JE FAIRE?

Je viens de trouver le code pour une boucle sur la construction while (<>).

Ici vous pouvez voir mieux:

$command_string = "par-format 70j p0 s0 < " . $ARGV[0] . "|\n";                                                                                

open DATA, $command_string  or die "Couldn't execute program: $!";

print "\t    <div>&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;|-- <strong>Description</strong></div>\n";
while ( defined( my $line = <DATA> )  ) {
   chomp($line);
   # print "$line\n";
   print "\t    <div>&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;|&‎nbsp;&‎nbsp;&‎nbsp;-- " . $line  . "</div>\n";
}

close DATA;

S'il vous plaît aussi ne pas hésiter à corriger tout code ici, voici mon premier poème de Perl.

Merci!

Était-ce utile?

La solution

Vous pouvez toujours utiliser $. ou le nom anglais $INPUT_LINE_NUMBER pour contrôler la logique dans votre boucle avec:

while (my $line = <>) {
    if ($. == 1) {
        # do cool stuff here
    }
    # do normal stuff here
}

Autres conseils

Pour gérer la première ligne différemment, vous pouvez simplement mettre

$line = <DATA>;

au dessus de votre boucle.

Avec une vérification correcte des problèmes de lecture (fichier vide, etc.) cela devrait être

if ($line = <DATA>) {
    ...do special things...
}

while (my $line = <DATA>) {
    ...do regular things...
}

Je ne suis pas sûr de l'appel defined(). Vous ne pourriez pas besoin, car une chaîne vide a une valeur fausse vérité.

Du point de vue des « meilleures pratiques » il y a beaucoup de mal avec cet exemple de code:

open DATA, $command_string  or die "Couldn't execute program: $!";
  • trou de sécurité, s'il vous plaît me exploiter.
  • DATA est une valeur magique qui pointe vers une section de __DATA__ à la fin du fichier courant.
  • Vous devez utiliser

    open my $fh 
    

    Ce qui utilise une variable lexicale pour une poignée de fichier au lieu d'une approche globale.

  • Vous devez utiliser 3 arg ouverte, à savoir:

    open my $fh, '<'  , $filename
    open my $fh, '-|' , $command
    open my $fh, '-|' , $command, @args 
    

    malheureusement je dois encore travailler comment 3-arg fonctionne avec deux tuyaux. Theres' cette chose IPC :: Open2, mais je ne l'ai pas travaillé sur la façon à l'utiliser encore efficacement. Suggestions de bienvenue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top