从Perl中的hasp映射中删除键

问题描述 投票:0回答:1

由于我是perl的新手,所以尝试学习一些基础知识。不知道这有多重要。

我有一个SQL Select查询,执行成功后返回1。我也有一个哈希图说

%map

对于此映射的每个键,我需要通过将该键作为输入来执行SQL。那是:

foreach my $key(keys %map){

  my ($temp, $csr) = &the_fetchonerow_sql($sql, 1, $key);
}

如果sql返回1,则必须从映射中删除该对应键。

有人可以帮我提供代码吗?

这是我尝试过的代码的一部分,但出现错误“使用未初始化的变量eq”。

foreach my $key(keys %map){

  my ($temp, $csr) = &the_fetchonerow_sql($sql, 1, $key);
  if($csr eq 1){
    delete($map{$key});
  }
}
perl hash
1个回答
0
投票

[$csr显然是undef,大概是数据库中的NULL

for my $key (keys %map) {
   my (undef, $csr) = the_fetchonerow_sql($sql, 1, $key);
   if (defined($csr) && $csr == 1) {
       delete($map{$key});
   }
}

[如果只想测试值是否为真-1为真,0undef为假-上面的内容简化为以下内容:

for my $key (keys %map) {
   my (undef, $csr) = the_fetchonerow_sql($sql, 1, $key);
   if ($csr) {
       delete($map{$key});
   }
}

for my $key (keys %map) {
   my (undef, $csr) = the_fetchonerow_sql($sql, 1, $key);
   delete($map{$key}) if $csr;
}

注意:

  • ==用于比较数字。 eq用于字符串。
  • 我删除了&。它不应该在那里。
  • 无需声明不使用的变量。]​​>
  • 可能有更快的选择来重复执行“相同”查询。
© www.soinside.com 2019 - 2024. All rights reserved.