如何在由另一个变量值构造的变量中使用哈希值



我从一个名为flowfx.config.pl的文件中读取了一些配置。它看起来像这样:

logfile_path     => '/proj/flowfx/ffx/log/',
path       => '/temp/',
skip_files => [ 'png', 'gif', 'jpg' ],

然后,我想使用从命令行传入的组件,并构造一个变量其使用来自配置文件的path的值。它在一定程度上起作用。更容易向您展示代码,也更容易阅读注释来解释什么有效,什么无效。

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"};

我确信这是些琐碎的事情。你能告诉我我做错了什么吗?

怎么样:从@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"};

最新更新