Aynı anda çok satırlı bir satır bir satırı işlemek için uygun PBP onaylı yolu anlamaya çalışıyorum. Birçok Perl kodlayıcısı, çok satırlı dizeyi bir "el yapımı" olarak ele almayı önerir. Sonra sıkı refs kullanımda iken bir dize bir sembol olarak kullanamamak hakkında derleyici bir uyarı alırsınız. dışarı yorum satırı "katı kullanın" diyeÇok satırlı bir dizeyi perl'de bir kerede bir kerede sıkı kullanımla nasıl işleyebilirim?
#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";
Uyarı:
İşte sorunun basit bir çalışma örnek. Ben kullanılmadan sıkı Bu komut dosyasını çalıştırdığınızda, istediğim ve beklediğiniz olsun:
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
Burada olsa, sorun da bu. "Açık $ ResultsHandle, '<', \ $ dönüşü;" 8
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.
Hattı: Ben yorumsuz zaman çizgisini "sıkı kullanmak", ben Perl aşağıdaki uyarıyı veya hatayı alıyorum hat, bu arada. Perl Best Practices'ın sıkı bir şekilde kullanmamı gerektirdiğinden, PBP bir seferde çok satırlı bir satırı bir satır işlemem için nasıl bekliyor? SO topluluğundan herhangi bir öneriniz var mı?
Teşekkürler!
C (üstte) ve Perl'in kendisi tarafından kolayca elde edilebilecek bir şey için backtick kullanımı. – innaM
Teşekkürler, Manni. Dizin içeriği alımı sadece gösterim amaçlıydı. Gerçek programım aslında başka bir program çağırıyor ve çıkışını işler. Ve eski moda değişken başlatma, daha fazla çalışmam gereken bir şey. Ama sık sık eski komut dosyalarından kesip yapıştırırım. :-) Yine de daha iyisini yapmaya çalışıyorum. –