我正在从.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)
PING_TTL | 1 CLIENT_PORT | 7870 FTP_SERVER | 192.162.522.222
任何人都可以建议我这样做吗?
/岩石
除非您将此作为学习练习,否则最好的方法是使用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)