Text::Balanced perl 模块的正确用法

Correct usage of Text::Balanced perl module

我正在尝试使用 Text::Balanced perl 模块来提取大括号中的文本。在这种特殊情况下,输入是 bind 配置文件 /etc/named.conf,但我正在寻找一般用途。 问题是,我得到了 undef 结果,结果是一个未初始化的值错误。

这是我的代码(现在只是一个树桩,还没有处理递归和其他东西):

#!/usr/bin/env perl
use strict;
use diagnostics;

use Text::Balanced qw (
                       extract_bracketed
                      ) ;


my $config = '/etc/named.conf';

open my $fh, '<', $config or die "Cannot open $config: $!";
$/ = undef;
my $text = <$fh>;
close $fh;

my $content = extract_bracketed( $text, '{}' );
print $content ;

我已阅读 http://perldoc.perl.org/Text/Balanced.html 但无法弄清楚我做错了什么(我使用标量变量而不是数组,但这应该不是问题)

这里也有类似的问题Text::Balanced and multiline xml,但它以不适合我的用例的方式得到解答(.xml 解析的特定解决方案)

请指教

谢谢

在正则表达式中你可以使用这个:

my $str = '
<statement-1> ["<statement-1-name>"] [<statement-1-class>] {
    { {<option-1>;}
   <option-2>;}
   <option-N>;
};

<statement-2> ["<statement-2-name>"] [<statement-2-class>] {
   <option-1>;
   <option-2>;
   <option-N>;
};

<statement-N> ["<statement-N-name>"] [<statement-N-class>] {
   <option-1>;
   <option-2>;
   <option-N>;
};';

print "L: \n" while($str=~m/\{((?:[^{}]++|\{(?1)\})++)\}/gs);