首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串和散列引用传递给子例程

将字符串和散列引用传递给子例程
EN

Stack Overflow用户
提问于 2019-07-05 06:10:43
回答 1查看 49关注 0票数 1

我将一个字符串和一个散列传递给一个子例程,其中哈希被接受为对子例程的引用。在子例程调用结束时,我希望我的散列将被填充。快照:

代码语言:javascript
复制
#!/usr/local/bin/perl5.8

sub passHashAndFile {
  my ($file, $hashRef) = @_;
  open(HANDLE, $file) or die("Can not open file $file \n");
    while(<HANDLE>) {
      my @splitted_values = split("--", $_);
      $hashRef->{$spllited_values[0]} = $hashRef->{$spllited_values[1]};
    }
  close(HANDLE);
}

my %hash;
passHashAndFile("test.txt", %hash);
foreach my $elem (keys %hash) {
  print "Key = $elem, Value = $hash{$elem}\n";
}

我的test.txt看起来是这样的:

代码语言:javascript
复制
1--2
3--4
5--6
7--8

我将哈希捕获为引用,然后取消引用以填充值。它做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-05 06:19:43

代码语言:javascript
复制
passHashAndFile("test.txt", %hash);

应该是

代码语言:javascript
复制
passHashAndFile("test.txt", \%hash);

此外,您还拼写错了变量名,分配了错误的值,使用了未本地化的全局vars,并且使用了有问题的2-arg open。而且,大多数人都会让子返回一个散列引用,而不是将一个引用转到一个空的散列。

代码语言:javascript
复制
#!/usr/local/bin/perl5.8

use strict;
use warnings;

sub parse_file {
   my ($qfn) = @_;
   open(my $fh, '<', $qfn)
      or die("Can't open file \"$qfn\": $!\n");

   my %hash;
   while (my $line = <$fh>) {
      my ($key, $val) = split(/--/, $line);
      $hash{$key} = $val;
   }

   return \%hash;
}

my $hash = parse_file("test.txt");
for my $key (keys %$hash) {
   print "Key = $key, Value = $hash->{$key}\n";
}

我们通常忽略我们的答案,但总是使用use strict; use warnings;。它至少会发现其中一个问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56897385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档