如何在Perl中解析此配置文件格式(允许注释)?

use*_*686 0 perl

我正在从.txt文件中读取一些参数(来自用户输入),并希望确保我的脚本可以读取它,即使用户在该特定参数之前留下空格或制表符.

此外,如果我想为每个参数添加注释,后跟#,在参数(例如7870 # this is default port number)之后让用户知道参数

我怎样才能在同一个文件中实现它?

现在,我正在使用split /\|\s/.

码:

$data_file="config.txt";
open(RAK, $data_file)|| die("Could not open file!");
@raw_data=<RAK>; 

@Ftp_Server =split(/\|\s/,$raw_data[32]);
Run Code Online (Sandbox Code Playgroud)

config.txt(用户输入文件)

PING_TTL   |   1
CLIENT_PORT |   7870
FTP_SERVER  |   192.162.522.222

任何人都可以建议我这样做吗?

/岩石

FMc*_*FMc 6

除非您将此作为学习练习,否则最好的方法是使用CPAN中的配置解析模块.下面是使用Config :: General的插图,它足够灵活,可以容纳您不寻常的分隔符,并提供对配置参数的良好OO风格访问.[注意:要使用此示例,您需要先安装Config::General模块.我提到这个是因为看起来你在运行Sinan的例子时遇到了麻烦,这也需要你从CPAN安装一个模块.

use strict;
use warnings;
use Config::General;

my $c = Config::General->new(
    -ConfigFile     => $ARGV[0],
    -SplitPolicy    => 'custom',     # Define | as our delimiter.
    -SplitDelimiter => qr/\s*\|\s*/,
    -ExtendedAccess => 1,            # Allow OO-style access.
);

print $_, "\n" for
    $c->PING_TTL,
    $c->CLIENT_PORT,
    $c->FTP_SERVER,
    $c->FOO,
;
Run Code Online (Sandbox Code Playgroud)

测试配置文件:

PING_TTL    | 1               # default ping interval is 1 second
CLIENT_PORT | 7870            # default port
FTP_SERVER  | 192.162.522.222 # ftp server ip address
FOO         | abcd            # Make sure we can handle # and | in comments
Run Code Online (Sandbox Code Playgroud)

输出:

1
7870
192.162.522.222
abcd
Run Code Online (Sandbox Code Playgroud)