在Perl脚本中,我们从pm文件中检索配置详细信息。用户使用脚本的界面更改配置详细信息后,应在pm文件中写回相同的值。
例如,我有以下config.pm
文件:
$SourcePrimUserHost = '10.226.33.233';
$SourcePrimUserPort = '33002';
$SourceGroupsHost = '10.226.33.233';
$SourceGroupsPort = '33002';
我正在从Perl脚本中读取这些值。我想将更新的值存储回config.pm
文件。
我们怎么做?期待您的帮助。
答案 0 :(得分:12)
这不是一个好的设计选择。
我建议使用像YAML这样的数据序列化格式,尽管JSON,Freeze / Thaw和Dumper可能是其他参赛者。此配置最好存储在单独的文件中。
如果 将数据存储在同一文件中,则可以使用__DATA__
令牌。后面的所有内容都可以在代码中作为DATA
文件句柄访问,并且不会被perl执行。更新配置时找到此标记也很简单。如果模块被调用Foo::Bar
:
my $serialized_stuff = ...;
my $self_loc = $INC{"Foo/Bar.pm"}; # %INC holds the location for every loaded module.
my $tempfile = ...;
open $SELF, "<", $self_loc or die ...;
open $TEMP, ">", $tempfile or die ...;
# don't touch anything before __DATA__
while(<$SELF>) {
print $TEMP $_;
last if /^__DATA__$/;
}
print $TEMP $serialized_stuff;
close $TEMP; close $SELF;
rename $tempfile => $self_loc or die ...;
答案 1 :(得分:5)
使用Config::General中许多配置工具之一,例如CPAN。它们易于使用,支持不同的符号,您可以将值写回文本文件。