在Perl中,如何处理配置文件中的延续行?

Ste*_*oss 0 perl configuration

所以我试着在配置中读取.Perl中的文件.配置文件使用尾部反斜杠来表示行继续.例如,文件可能如下所示:

  === somefile ===
  foo=bar
  x=this\
  is\
  a\
  multiline statement.
Run Code Online (Sandbox Code Playgroud)

我有读取文件的代码,然后处理尾随反斜杠以连接行.但是,看起来Perl已经为我做了.例如,代码:

  open(fh, 'somefile');
  @data = <fh>;
  print join('', @data);
Run Code Online (Sandbox Code Playgroud)

打印:

  foo=bar
  x=thisisamultiline statement
Run Code Online (Sandbox Code Playgroud)

瞧,'@ dat =;' 声明似乎已经处理了反斜杠!

这是Perl中定义的行为吗?

Cha*_*ens 5

我不知道你在看什么,但这不是有效的Perl代码,这不是Perl中的行为.这是一些Perl代码,可以满足您的需求:

#!/usr/bin/perl

use strict;
use warnings;

while (my $line = <DATA>) {
    #collapse lines that end with \
    while ($line =~ s/\\\n//) {
        $line .= <DATA>;
    }
    print $line;
}

__DATA__
foo=bar
x=this\
is\
a\
multiline statement.
Run Code Online (Sandbox Code Playgroud)

注意:如果您在命令行上键入文件,如下所示:

perl -ple 1 <<!
foo\
bar
baz
!
Run Code Online (Sandbox Code Playgroud)

然后你看到你的shell的效果,而不是Perl.考虑以下反例:

printf 'foo\\\nbar\nbaz\n' | perl -ple 1
Run Code Online (Sandbox Code Playgroud)


bri*_*foy 5

我的ConfigReader :: Simple模块支持配置文件中的延续行,如果它是您问题中的格式,则应该处理您的配置.

如果您想了解如何自己动手,请查看该模块的来源.这不是很多代码.