0

在 Perl 脚本中,我们从 pm 文件中检索配置详细信息。用户使用脚本界面更改配置详细信息后,应将相同的值写回到 pm 文件中。

例如,我有以下config.pm文件:

$SourcePrimUserHost = '10.226.33.233';
$SourcePrimUserPort = '33002';
$SourceGroupsHost = '10.226.33.233';
$SourceGroupsPort = '33002';

我正在从 Perl 脚本中读取这些值。我想将更新的值存储回config.pm文件。

我们应该怎么做?期待您的帮助。

4

2 回答 2

12

不是一个好的设计选择。

  1. Perl 模块可以(应该!)以用户可以阅读但不能编写的方式安装。
  2. 如果该模块被多个用户或多个 Perl 程序使用,则 conf 将是系统全局的,而不是特定于应用程序的。
  3. 如果同时运行程序的多个实例,则会出现问题。

我建议使用像 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 ...;
于 2013-02-11T06:57:42.120 回答
5

使用CPAN中的Config::General等众多配置工具之一。它们易于使用,支持不同的符号,您可以将值写回文本文件。

于 2013-02-11T07:02:59.787 回答