我使用匿名哈希将值从两个不同的子例程传递到新的子例程。但是,现在我无法使用传递的变量执行计算。

use warnings;
use strict;
use feature 'say';
use DBI;
use autodie;
use Data::Dumper;
use CGI;

print "Enter sequence";
my $seq = <STDIN>;
chomp $seq;
$len = length $seq;
my $f = nuc($seq);
perc({ len => $len });

sub nuc {
  my ($c) = @_;
  chomp $c;
  my $len = length $c;
  for (my $i = 0; $i< = $len; $i++) {
    my $seq2 = substr($c, $i, 1);
    $nuc=$nuc . $seq2;
    chomp $nuc;
  }
  my $l = perc({nuc => $nuc});
}

sub perc {
  my $params = shift;
  my $k = $params->{nuc};
  my $w = $params->{len};
  my $db = "hnf1a";
  my $user = "root";
  my $password = "";
  my $host = "localhost";
  my $dbh = DBI->connect("DBI:mysql:database=$db:$host",$user,$password);
  my $sth = $dbh->prepare('SELECT COUNT(*) FROM mody where nm = ?');
  for (1..100) {
    $sth->execute(int(rand(10)));
  }
  chomp (my $input = $k);
  my @num = split /':'/, $input;
  for my $num(@num)  {
    say "rows matching input nuc <$num>:";
    $sth->execute($num);
    my $count = $sth->fetchrow_array;
    say "$count";
    $u += $count;
  }
}
$h = $u / $w;
print $h;


我通过声明匿名哈希将变量:$ nuc和$ len传递给最后一个子例程“ perc”。
当我使用这些变量执行计算时,我没有得到正确的答案。
对于上述划分,我得到了“非法划分”的声明。

请帮帮我。提前致谢。

最佳答案

您正在对perc进行两个单独的调用,每个调用仅在哈希中具有一个必需值。您不能这样做:子例程不会“记住”在单独的调用中传递给它的值,除非您编写代码来做到这一点

您需要收集所有值并将它们通过一次调用传递给perc

关于mysql - 无法通过将值从两个不同的子例程传递到新的子例程来执行计算:Perl,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49045609/

10-11 04:49