在perl5中,我曾经对配置文件进行“do(file)”,如下所示:
---script.pl start ---
our @conf = ();
do '/path/some_conf_file';
...
foreach $item (@conf) {
$item->{rules} ...
...
---script.pl end ---
---/path/some_conf_file start ---
# arbitrary code to 'fill' @conf
@conf = (
{name => 'gateway',
rules => [
{verdict => 'allow', srcnet => 'gw', dstnet => 'lan2'}
]
},
{name => 'lan <-> lan2',
rules => [
{srcnet => 'lan', dstnet => 'lan2',
verdict => 'allow', dstip => '192.168.5.0/24'}
]
},
);
---/path/some_conf_file end ---
另外Larry Wall的“Programming Perl”也提到了这个方法:
但是做FILE对于读取程序配置文件之类的事情仍然有用。手动错误检查可以通过以下方式完成:
# read in config files: system first, then user
for $file ("/usr/share/proggie/defaults.rc",
"$ENV{HOME}/.someprogrc") {
unless ($return = do $file) {
warn "couldn't parse $file: $@" if $@;
warn "couldn't do $file: $!" unless defined $return;
warn "couldn't run $file" unless $return;
} }
优点:
弊:
perl6如何获得相同的结果
在perl6中有没有更好的方法(没有缺点)并且不解析自己的语法、语法、模块包括
类似“从文件中的文本表示加载哈希或数组”之类的内容?
您可以使用电子邮箱($file)
(参考 http://doc.perl6.org/language/5to6-perlfunc#do)。
正如您指出的,使用EVALFILE
有缺点,因此我不打算在这方面添加任何内容:-)
下面是一个示例配置文件:
# Sample configuration (my.conf)
{
colour => "yellow",
pid => $*PID,
homedir => %*ENV<HOME> ~ "/.myscript",
data_source => {
driver => "postgres",
dbname => "test",
user => "test_user",
}
}
这是一个使用它的示例脚本:
use v6;
# Our configuration is in this file
my $config_file = "my.conf";
my %config := EVALFILE($config_file);
say "Hello, world!\n";
say "My homedir is %config<homedir>";
say "My favourite colour is %config<colour>";
say "My process ID is %config<pid>";
say "My database configuration is:";
say %config<data_source>;
if $*PID != %config<pid> {
say "Strange. I'm not the same process that evaluated my configuration.";
}
else {
say "BTW, I am still the same process after reading my own configuration.";
}
该程序创建一个线程,用dir()读取目录,并将文件放在通道上$N个工作线程读取该通道并“处理”(打印)文件。 然而,我得到了这个“等待的第一个操作:”错误。 关于这个错误,我已经在陷阱页面上读了好几遍了,但还是没有弄明白。能解释一下这里发生了什么吗? 目录内容: 运行程序: 程序travers-dir. p6:
问题内容: How do I change the file creation date of a Windows file from Python? 问题答案: Yak shaving for the win.
这里是的,还是推荐的安装方法如 http://raku.org/getting-started/和 ps:使用OS X
问题内容: 我正在从xml配置转移到注释。我想转换一个会话范围的bean是 可以通过注释完成此操作吗?如果没有,我该怎么做才能使该声明继续工作? 问题答案: 在spring上下文xml中,执行以下操作: 请注意,尽管如此,你将需要为该包中的所有类编写接口。
我目前使用PostGIS作为我在python脚本中执行的许多空间功能的主干。特别是取几个shapefile几何图形,看看它们是否相交,然后将它们分类到不同的目录中。我使用shp2pgsql上传shapefiles,然后使用ST_Intersects关联它们,然后使用脚本中的os/shutil函数对它们进行排序。 我的问题是,我们的一个团队只在政府网络上工作,无法获得系统管理员的postgres/p
描述 (Description) 提供块时,此函数执行,就像BLOCK是一个函数一样,返回块中计算的最后一个语句的值。 当提供EXPR时,请执行EXPR指定的文件,就像它是另一个Perl脚本一样。 如果提供子程序SUB,则使用LIST作为参数执行子程序,如果已定义SUB,则引发异常。 语法 (Syntax) 以下是此函数的简单语法 - do BLOCK do EXPR do SUB(LIST)