我正在尝试找到一种适用于PBP的方法来逐行处理多行字符串。许多Perl编程人员建议将多行字符串视为文件句柄进行处理,这个方法在脚本中没有使用"use strict"时是有效的。但是,如果你的脚本启用了"use strict",那么编译器会发出一个关于不能在使用strict refs时将字符串用作符号的警告。
下面是一个简单的工作示例:
下面是一个简单的工作示例:
#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";
请注意 "use strict" 这一行被注释了。当我不使用 use strict 运行这个脚本时,我得到了我想要的和预期的结果:
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
然而,问题在于当我取消"use strict"行的注释时,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.
顺便说一下,第8行是“open $ResultsHandle, '<', \$return;”这一行。因此,由于Perl最佳实践要求我使用strict,那么PBP希望我如何一次处理多行字符串呢?SO社区有什么建议吗?
谢谢!