【发布时间】:2009-10-09 15:19:15
【问题描述】:
除了下面显示的 string-as-a-filehandle 解决方案之外,有没有人可以解决一次处理多行字符串的任务?
my $multiline_string = "line one\nline two\nline three\nline four";
my $filehandle;
open( $filehandle, '<', \$multiline_string )
or croak("Can't open multi-line string as a filehandle: $!");
while ( defined (my $single_line = <$filehandle>) ) {
# do some processing of $single_line here ...
}
close( $filehandle );
我不想使用文件句柄的理由很弱。当我在任何文件句柄上的打开命令和关闭命令之间有超过 10 条源代码行时,Test::Perl::Critic 会发牢骚。我正在对 $single_line 进行相当多的处理,因此在我的公开通话和关闭通话之间实际上有大约 40 行代码,我看不出有任何方法可以将其减少到 10 行。
而且我真的不想忽略构建中的 Perl::Critic 测试,因为这实际上是一个不错的测试,每当我在代码中打开一个实际的磁盘文件时,我都希望通过它。
【问题讨论】:
-
如果
$multiline_string很大,split返回的列表会更大,会破坏$multiline_string的逐行处理。要么使用正则表达式一次匹配一行,要么将您所做的工作分解到子例程中。我个人更喜欢后者。 -
哇。不去想子程序变通办法,我真是太傻了。有时我只是想不通。 :-)
标签: perl multiline filehandle perl-critic