加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – for循环的范围问题

发布时间:2020-12-15 23:22:37 所属栏目:大数据 来源:网络整理
导读:我是perl的新手,并且有一些范围或语法问题. 我正在尝试编写一段代码来读取文件中的行,将它们以特定的分隔符分成两部分,然后将每一半作为键值对存储在散列中.这是我的代码: #!/usr/bin/perluse strict;use warnings;my $filename = $ARGV[0];open(my $fh,':e
我是perl的新手,并且有一些范围或语法问题.

我正在尝试编写一段代码来读取文件中的行,将它们以特定的分隔符分成两部分,然后将每一半作为键值对存储在散列中.这是我的代码:

#!/usr/bin/perl
use strict;
use warnings;

my $filename = $ARGV[0];

open(my $fh,'<:encoding(UTF-8)',$filename)
  or die "Could not open file '$filename' $!";

my @config_pairs;
while (my $row = <$fh>) {
  chomp ($row);
  push (@config_pairs,$row);
}

my %config_data;
for my $pair (@config_pairs) {
  my ($key,$value) = split(/s*=s*/,$pair);
  %config_data{$key} = $value;
}

for my $k (%config_data) {
  print "$k is %config_data{$k}";
}

当我尝试运行时,我得到:

$perl test_config_reader.pl --config.txt
"my" variable %config_data masks earlier declaration in same scope at test_email_reader.pl line 22.
syntax error at test_config_reader.pl line 19,near "%config_data{"
Global symbol "$value" requires explicit package name at test_email_reader.pl line 19.
Execution of test_config_reader.pl aborted due to compilation errors.

我不确定我做错了什么.很明显我不明白perl是如何工作的.

解决方法

我在运行脚本时收到不同的消息:

Can't modify key/value hash slice in list assignment at ./1.pl line 19,near "$value;"
Global symbol "$key" requires explicit package name (did you forget to declare "my $key"?) at ./1.pl line 23.
Execution of ./1.pl aborted due to compilation errors.

要引用单个哈希值,请将sigil从%更改为$(认为“复数”与“单数”):

$config_data{$key} = $value;
# ...
print "$k is $config_data{$k}";

另外,$k和$key是不同的变量(在此期间你似乎已经解决了这个问题).

要迭代哈希,请使用keys:

for my $k (keys %config_data) {

否则,你也会循环遍历这些值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读