Jak mogę przetwarzać ciąg wieloliniowy po jednym wierszu naraz w perlu z zastosowaniem ścisłego stosowania?

Staram się znaleźć właściwy, zatwierdzony przez PBP sposób przetwarzania ciągu wieloliniowego po jednej linii na raz. Wiele koderów Perla sugeruje traktowanie ciągu wieloliniowego jako uchwytu pliku, który działa dobrze, chyba że w skrypcie używa się „ścisłego”. Następnie otrzymujesz ostrzeżenie od kompilatora o tym, że nie możesz użyć ciągu jako symbolu, podczas gdy ścisłe refs jest używane.

Oto prosty przykład działania problemu:

#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";

Zauważ, że wiersz „use strict” został skomentowany. Kiedy uruchamiam ten skrypt bez ścisłego użycia, otrzymuję to, czego chcę i oczekuję:

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

Oto problem. Gdy odkomentuję wiersz „use strict”, otrzymuję następujące ostrzeżenie lub błąd od Perla:

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.

Linia 8 to „open $ ResultsHandle”, „<”, $ return; ” tak przy okazji. Skoro więc Perl Best Practices wymaga użycia ścisłego, to w jaki sposób PBP oczekuje, że będę przetwarzał ciąg wieloliniowy po jednym wierszu na raz? Jakieś sugestie od społeczności SO?

Dzięki!

questionAnswers(7)

yourAnswerToTheQuestion