我从一个名为flowfx.config.pl的文件中读取了一些配置。 它看起来像这样:
logfile_path => '/proj/flowfx/ffx/log/',
path => '/temp/',
skip_files => [ 'png', 'gif', 'jpg' ],
然后我想使用从命令行传入的组件并构造一个变量 它使用配置文件中的路径值。它在一定程度上起作用。您可以更轻松地向您展示代码,并阅读评论以解释哪些有效,哪些无效。
my %flowfx = do 'flowfx.config.pl';
#prints value of '/proj/flowfx/ffx/log/'
print $flowfx{logfile_path};
#my component name which will be passed in on command line. hardcoded for the moment
$component = "flowfx";
下一段代码工作正常。 $ flowfx_log的值为' / proj / flowfx / ffx / log /'并按此印刷。
${$component . "_log"} = $flowfx{logfile_path};
print ${$component . "_log"};
以下不起作用。我得到错误"在打印中使用未初始化的值" 我希望$ flowfx_log2的值为$ flowfx {logfile_path},这是' / proj / flowfx / ffx / log /'
${$component . "_log2"} = ${$component."{logfile_path}"};
print ${$component . "_log2"};
我确定它是微不足道的。你能给我一些关于我做错的提示吗?
答案 0 :(得分:-1)
如何:从@ARGV读取组件。
很可能有更好的方法来获取输入但不使用模块,这似乎有效。
将值放在带键的哈希值中。
#!/usr/bin/perl
use strict;
use warnings;
my $component = $ARGV[0] or die "no input"; #passed in as argument
open my $fh, "flowfx.config.pl";
my %flowfx;
while ( my $line = <$fh> ){
# read in hash line by line, this assumes no useless input in file
my ( $key, $value ) = split( /\s*=>\s*/, $line ); # extract key/value
$value =~ s/\'//g; # remove quotes
if ( $value =~s /\[/\]/g ){ # make a list
$value = [ split(",",$value) ];
}
$flowfx{$key} = $value; # store the value in hash
}
close $fh; # close filehandle
my $info;
$info->{$component."_log"} = $flowfx{logfile_path};
print $component."_log".": ".$info->{$component."_log"};