Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当打印整个列文件而不是搜索行时,如何对代码进行故障排除?perl_Perl_Count_Counter - Fatal编程技术网

当打印整个列文件而不是搜索行时,如何对代码进行故障排除?perl

当打印整个列文件而不是搜索行时,如何对代码进行故障排除?perl,perl,count,counter,Perl,Count,Counter,我已经在这段代码上工作了几天,在最后一段中遇到了一个问题。目标是让文件打印出“疾病/特征”在文件中出现的次数。使用计数器,问题是代码只是打印出数组中一列中的所有内容,而不是搜索它的次数。我假设这是代码的计数器部分的问题 #!/usr/bin/perl use strict; use warnings; my %TRAIThash; my $usrin = "Leoprsy"; my %DISEASEslashTRAIT; open (my $input, "<", "gw

我已经在这段代码上工作了几天,在最后一段中遇到了一个问题。目标是让文件打印出“疾病/特征”在文件中出现的次数。使用计数器,问题是代码只是打印出数组中一列中的所有内容,而不是搜索它的次数。我假设这是代码的计数器部分的问题

    #!/usr/bin/perl

use strict;
use warnings;

my %TRAIThash;
my $usrin = "Leoprsy";
my %DISEASEslashTRAIT;   
open (my $input, "<", "gwas_catalog_v1.0-downloaded_2015-07-08.test") || die();

while (<$input>) {
    my @t = split (/\t/);
        my $tempVar = $t[7];
        chomp($tempVar);
        if (exists $DISEASEslashTRAIT{$tempVar}) {
            $DISEASEslashTRAIT{$tempVar}++;
    }
        else  {
            $DISEASEslashTRAIT{$tempVar}=1;
    }
}

my $DISEASEslashTRAITcount;
print $DISEASEslashTRAIT{"$usrin"}; "\n";
if (exists $DISEASEslashTRAIT{$usrin}) {
    print "\n $usrin is published ".$DISEASEslashTRAIT{$usrin}." times within the gwas database.\n";
}   
else {
    print "$usrin doesn't exist in the hash\n";
    }
close ($input);
#/usr/bin/perl
严格使用;
使用警告;
我的%TRAIThash;
我的$usrin=“Leoprsy”;
我的%DISEASEslashTRAIT;

open(my$input,“使用严格的
使用警告
pragmas为编写干净的代码提供了大量信息和帮助。最重要的是,在使用
my
之前,您需要声明所有变量。这将发现标识符的拼写错误

例如,您的第一个循环构建了
%DISEASEslashTRAIThash
散列,但在第二个循环中,您使用的是
%DISEASEslashTRAIT
。您还有
exists$$DISEASEslashTRAIT{“$usrin”}
,它应该只有一个美元符号,而
警告
将拾取该符号

下面是我将如何编写你的程序。最好避免在局部变量中使用大写字母

#!/usr/bin/perl

use strict;
use warnings;

open my $in_fh, '<', 'file.test' or die $!;
my %disease_traits;
while ( <$in_fh> ) {
    chomp;
    my $disease_trait = (split /\t/)[7];
    ++$disease_traits{$disease_trait} if $disease_trait;
}

while () {
    my $usrin = "Maximal oxygen uptake response";
    # my $usrin = <>;
    chomp $usrin;
    my $count = $disease_traits{$usrin};
    if ( defined $count ) {
        print qq{\n "$usrin" is published $disease_traits{$usrin} times within file.\n};
        last;
    }
}
!/usr/bin/perl
严格使用;
使用警告;

打开my$in_fh,'你应该总是以
use strict
use warnings
开始一个Perl程序欢迎使用堆栈溢出和Perl标记。你应该首先向你的程序添加
use strict
use warnings
,并用
my$foo
声明所有变量。然后是一个关于变量命名的单词:在Perl中,最好使用使用使用下划线的小写变量名。仅大写的变量应仅用于全局变量。尝试对内容使用发音名称。还有一些约定,例如对文件句柄使用
$fh
(如果只有一个约定的话)和
$i
作为循环迭代器。也就是说,请正确缩进您的代码和您的问题。我将编辑此代码以包含这些内容,但为什么@borodin还应包含示例输入。请参阅我的评论,以获得有关@borodin注释的问题的答案。当我们说“程序应该包括
strict
warnings
“这也意味着”并且代码应该在您有权限时编译和运行"。虽然在中编辑它们很好,但你接下来需要做的是让你的程序运行起来,看看问题是否消失。运行得很好谢谢谢谢谢谢@Borodin如果你有时间@Borodin,你能解释一下你的代码是如何工作的,以及为什么它优于我的,这样我就能学习并变得更好吗?@Michaela:当然。我会这样写的我明天给你写便条非常感谢你@Borodin