Comment puis-je traiter une chaîne multi-ligne une ligne à la fois en perl, avec l'utilisation stricte en place?

J'essaie de trouver le bon PBP approuvé la manière de traiter une chaîne multi-ligne une ligne à la fois. De nombreux programmeurs Perl suggèrent le traitement de la multi-ligne de chaîne comme un descripteur de fichier, qui fonctionne très bien, sauf si vous avez "use strict" dans votre script. Ensuite, vous obtenez un avertissement du compilateur de ne pas être en mesure d'utiliser une chaîne comme un symbole, tandis que le strict refs est en cours d'utilisation.

Voici un simple exemple de problème:

#use strict;
use warnings; 

my $return = `dir`;
my $ResultsHandle = "";
my $matchLines = "";
my $resultLine = "";
open $ResultsHandle, '<', $return;
while (defined ($resultLine = <$ResultsHandle>)) {
    if ($resultLine =~ m/joe/) {
        $matchLines = $matchLines . "\t" . $resultLine;
    }
}
close($ResultsHandle);
print "Original string: \n$return\n";
print "Found these matching lines: \n$matchLines\n";

Avis que le "use strict" de la ligne est commentée. Lorsque j'exécute ce script sans l'utilisation stricte, j'obtiens ce que je veux et s'attendre:

Original string: 
 Volume in drive D has no label.
 Volume Serial Number is 50D3-54A6

 Directory of D:\Documents and Settings\username\My Documents\Eclipse\myTestProject

09/18/2009  11:38 AM    <DIR>          .
09/18/2009  11:38 AM    <DIR>          ..
09/18/2009  11:36 AM               394 .project
09/18/2009  11:37 AM                 0 joe.txt
09/18/2009  11:37 AM                 0 joey.txt
09/18/2009  11:38 AM                 0 kurt.txt
09/18/2009  11:43 AM               497 main.pl
09/18/2009  11:38 AM                 0 shane.txt
               6 File(s)            891 bytes
               2 Dir(s)   6,656,188,416 bytes free

Found these matching lines: 
    09/18/2009  11:37 AM                 0 joe.txt
    09/18/2009  11:37 AM                 0 joey.txt

Voici le problème, cependant. Quand j'ai dé-commenter le "use strict" de la ligne, j'obtiens le message d'avertissement suivant ou erreur de Perl:

Can't use string ("") as a symbol ref while "strict refs" in use at D:/Documents and Settings/username/My Documents/Eclipse/myTestProject/main.pl line 8.

La ligne 8 est le "open $ResultsHandle, '<', \$retour;" la ligne, par la manière. Donc, depuis Perl Best Practices m'oblige à l'utilisation stricte, comment ne PBP m'attendre à un processus multi-ligne de chaîne une ligne à la fois? Toutes les suggestions de la communauté?

Merci!

Si vous souhaitez parler à propos de les meilleures pratiques, je vous suggère de jeter un oeil à tous vos initialisation d'une variable, à la façon dont vous définissez des variables, comme dans l'ancien C (en haut), et votre utilisation de backticks pour quelque chose qui peut facilement être réalisé en Perl lui-même.
Merci, Manni. Le répertoire d'extraction du contenu était juste pour les besoins de la démonstration. Mon programme fait des appels d'un autre programme et le processus de sa production. Et l'ancienne initialisation d'une variable est quelque chose que je dois travailler plus sur. Mais j'ai souvent cut & coller à partir de vieux scripts et c'est ce que je reçois. 🙂 J'essaie de faire mieux, mais.

OriginalL'auteur Kurt W. Leucht | 2009-09-18