首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要重置Perl哈希索引吗?

我需要重置Perl哈希索引吗?
EN

Stack Overflow用户
提问于 2014-03-11 23:56:33
回答 3查看 146关注 0票数 2

好吧,这是一个N00b问题,但这让我很困惑:

我有以下Perl代码:

代码语言:javascript
复制
%project_keys = (
  cd     => "continuous_delivery",
  cm     => "customer_management",
  dem    => "demand",
  dis    => "dis",
  do     => "devops",
  sel    => "selection",
  seo    => "seo"
);

print "proj_code is $proj_code\n";
while ( ($key, $value) = each %project_keys ) {
    if ($key == $proj_code) {
        $url = "http://projects/".$project_keys{$key}."/setter";
        last;
    }
}

$proj_code总是在同一个('dis')中传递,而打印行显示了这一点。

但是,每次运行这个程序时,我都会得到project_keys{$key}的不同值。

我做错了什么(无疑是显而易见的)?我见过关于每个人都是“脆弱的”的评论--是这样吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-12 00:19:14

如果你已经有了你想要的“钥匙”,检查它是否存在并使用它.

此外,始终使用use strict; use warnings;

代码语言:javascript
复制
#!/usr/bin/perl

use strict;
use warnings;

my $proj_code= 'dis';
my $url;

my %project_keys = (
  cd     => "continuous_delivery",
  cm     => "customer_management",
  dem    => "demand",
  dis    => "dis",
  do     => "devops",
  sel    => "selection",
  seo    => "seo"
);

$url = "http://projects/$project_keys{$proj_code}/setter" 
    if exists $project_keys{$proj_code};

print "url: $url\n";

产出:

代码语言:javascript
复制
url: http://projects/dis/setter
票数 6
EN

Stack Overflow用户

发布于 2014-03-12 00:23:04

是的,如果您使用each来迭代一个散列,但是在没有返回结果之前不要一直迭代,那么您将在下一次停止的时候重新开始。

可以在循环之前使用键或值将内部迭代器重置为开头,如下所示:

代码语言:javascript
复制
keys(%project_keys);
while ( ($key, $value) = each %project_keys ) {

尽管如此,你还有其他一些问题:

使用eq而不是==测试字符串相等性。

整个循环没有意义;您不需要遍历散列来查找值;只需执行以下操作即可替换该循环:

代码语言:javascript
复制
if ( exists $project_keys{$proj_code} ) {
    $url = "http://projects/$project_keys{$proj_code}";
}
票数 3
EN

Stack Overflow用户

发布于 2014-03-12 00:37:59

你在使用each。最好不要。它很微妙,并且在散列中存储状态。

远比

代码语言:javascript
复制
while( my ( $key, $value ) = each %hash ) {
   ...
}

是在foreach函数上使用keys循环。

代码语言:javascript
复制
foreach my $key ( keys %hash ) {
   my $value = $hash{$key};
   ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22339226

复制
相关文章

相似问题

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