Perl 读取文件并将每一行存储为变量/值



我对perl很陌生,但到目前为止,我已经做了几乎所有我需要做的事情,直到现在。

我有一个文件格式如下的文件:

#IPAAS
@NX_iPaaS_AuthKey=dGstaG9zaGlub0BqcCasdpasdHN1LmNvbTppUGFhUzAw
@NX_iPaaS_href=live/661134565/process/75231

我想将以@NX_iPaaS开头的每一行读取到一个类似的命名变量中,例如@NX_iPaaS_AuthKey创建一个名为 $NX_IPAAS_AUTHKEY 的新变量并保存该值,NX_iPaaS_href会产生一个名为 $NX_IPAAS_HREF 的新变量,其中包含值等等?

--更新--

嘿伙计们,我需要对上述解决方案进行轻微调整......

所以我刚刚发现我正在阅读的文件会有"部分",例如

----- SECTION=cr 
NX_NTF_PERSISTENT_ID=cr:400017 
NX_NTF_REF_NUM=45 
----- SECTION=cnt 
NX_NTF_PERSISTENT_ID=cnt:F9F342055699954C93DE36923835A182 

您可以看到其中一个变量出现在两个部分中,这(因为我没有"下一个,除非定义")导致以前的值被覆盖。有没有办法在每个部分顶部的"section="行上提供的值作为NX_NTF_变量名称的前缀?

谢谢

好的做法是使用哈希。

my %hash;
while (<>) {
    chomp;
    my ($key, $value) = split /=/;
    next unless defined $value;
    $hash{$key} = $value;
}
请参阅为什么"使用变量作为变量名称

"是愚蠢的,为什么使用变量变量名称不是一个好主意。

你想使用的是一个哈希。 像这样:

use strict;
use warnings;
my $input = "yourfilename.txt";
open(my $IN, "<", $input) or die "$0: Can't open input file $input: $!n";
my %NX_iPaaS_vars;
while (<$IN>) {
    chomp;
    if ($_ =~ /^@NX_iPaaS/) {
        my ($key, $value) = split(/=/, $_);
        $NX_iPaaS_vars{$key} = $value;
    }
}

要稍后使用变量,请使用 $NX_iPaaS_vars{"name of variable you want"} ,例如:

my $href_path = $NX_iPaaS_vars{'@NX_iPaaS_href'};
# Do something with $href_path here...
#!/usr/bin/perl -w
use strict;
open(FILE,"test.txt");
my %hash;
foreach (<FILE>)
{
       if($_=~/@(S+)=(S+)/)
       {
               $hash{$1}=$2;
       }
}
close(FILE);
# Test Code
foreach (keys %hash)
{
       printf("%s=%sn",$_,$hash{$_});
}

如果变量名称是唯一的,则此解决方案非常有效。

相关内容

  • 没有找到相关文章

最新更新