当我使用文件句柄处理多行字符串时,如何避免使用Perl :: Critic警告?

Kur*_*cht 2 perl multiline filehandle perl-critic

有没有人能够解决一次处理多行字符串的任务,除了下面显示的字符串作为文件句柄解决方案?

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 );
Run Code Online (Sandbox Code Playgroud)

我不想使用文件句柄的原因相当薄弱.Test :: Perl ::当我在任何文件句柄上打开命令和关闭命令之间有超过10个源代码行时,批评者会发牢骚.我正在对$ single_line进行相当多的处理,所以在我的公开通话和近距离通话之间我实际上有大约40行代码,我没有看到任何方法将其降低到10.

而且我真的不想忽略我的构建中的Perl :: Critic测试,因为这实际上是一个不错的测试,我想在我的代码中打开一个实际的磁盘文件时通过它.

Jon*_*erg 9

通过创建子程序并使用文件的每一行调用它,让Perl Critic感到高兴,让自己更快乐.

use strict; use warnings;

sub do_something {
    my ($line) = @_;
    # do something with $line
}

open my $fh, '<', \$multiline_string
    or die "Cannot open scalar for reading: $!";

while(<$fh>) {
    chomp;
    do_something($_);
}

close $fh; 
Run Code Online (Sandbox Code Playgroud)


yst*_*sth 5

嗯,这不是让你有更小的代码块只能做一件事的呜咽的目的吗?制作一个子程序,完成每行所需的工作.

很多人都建议过split /\n/. split /^/更像是文件句柄方式.