为什么我已经声明了Perl却告诉我我的数组未声明?

用户7219946

我有一个看起来像这样的输入文件:

AC_000044.1_a_bothflanks_2kb_polyA.4    AAGTATAATAAAAAAAAAAAAGAAA   25  25  69646
    AC_000044.1_aa_bothflanks_2kb_polyA.5   AAGTATAATAAAAAAAAATAATTAAAAAAAAAAAAAATAAAAAATAAAATAAAATAAAAATAAAAA  66  91  69644
    AC_000044.1_ab_bothflanks_2kb_polyA.5   TATAATAAAAAAAAAAACATTAAAAATAAAAAATAAAAAATAAAAA  46  137 69647
    AC_000044.1_ac_bothflanks_2kb_polyA.3   TATAATTAAAAAAAAAAAAAAAAAAAA 27  164 69642

由制表符分隔的5条信息。我想将第5个选项卡中的每个数字与第4个选项卡中的每个数字进行比较,如果它小于或等于我希望它返回第一个选项卡中的数据的数字。

这是我的代码:

#! /usr/bin/perl -w
use strict;
use Cwd;

my $tab_input = $ARGV[0];
my $output = 'output.txt';
my (@trans_id, @seq, @length, @cum_length, @coord);

open (my $INPUT, "<$tab_input") or die  "unable to open $tab_input\n";
open (my $OUTPUT, ">$output") or die  "unable to open $output\n";

while (<$INPUT>) {

    my @tabfile =split ("\t+",$_);
    push @trans_id, $tabfile[0];
    push @seq, $tab_file[1];
    push @length, $tab_file[2];
    push @cum_length, $tab_file[3];
    push @coord, $tab_file[4];

    for (@tabfile)  {
        if {$tabfile[3] < $tabfile [4]) {
            print "$tabfile[0]\n" > $output;

    }

}

close $output;
close $tab_input;
print "Tab file parsing complete.\n";

但是,我在第22行(​​if语句)出现错误,说$ coord和%cum_length需要显式的程序包名称。我已经在代码顶部修改了数组。当我仅使用数组时,为什么在错误代码中返回%'hash'符号。有任何想法吗?

鲍罗丁

您描述的错误不是由该代码生成的。这是我可以看到的问题列表

  • 您已经声明@tabfile但正在使用@tab_file

  • 您的陈述中if {$tabfile[3] < $tabfile [4]) {有一个大括号而不是一个圆括号

  • 您的声明print "$tabfile[0]\n" > $output应为

    print $OUTPUT "$tabfile[0]\n";
    
  • 同一条语句缺少右括号

  • close需要一个文件句柄参数,而不是文件名,因此您的语句close $outputclose $tab_input应该分别close $OUTPUTclose $INPUT

我认为它应该看起来像这样

#!/usr/bin/perl

use strict;
use warnings 'all';

open my $out_fh, '>', 'output.txt' or die $!;

while ( <> ) {

    my @fields = split;

    print $out_fh "$fields[0]\n" if $fields[3] < $fields [4];
}

print "Tab file parsing complete.\n";

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么即使我已经声明了别名,Mysql 仍然告诉我有一个未知的列?

为什么xcode看不到我的app-bridge-header并告诉我未声明文件GIDSignInDelegate?

为什么我已经声明了“我没有定义”而不是“我”

Java:错误说未声明的变量,但我想我已经声明了它?

无法弄清楚它告诉我“模块'AppModule声明了意外的值'undefined'”

为什么perl不在乎我是否在严格的条件下声明了变量?

对于@SpringBootTest,为什么我没有一个告诉我“配置错误:发现@BootstrapWith的多个声明”?

为什么我收到错误“无法访问类中声明的私有成员”,即使我已经声明了朋友类

为什么没有找到python模块但安装告诉我已经需要

为什么编译器已经告诉我要考虑使用“ let”绑定?

为什么Powershell告诉我我需要。\

为什么MySQL Workbench告诉我我需要分号?

为什么我的IDE告诉我if语句是多余的?

为什么Chrome告诉我有警告消息,却不告诉我它们是什么?

谁能告诉我为什么我的过滤数组为空?

为什么编译器说我的过程中未声明我的表单变量?

为什么将我的数组声明为引用数组

Axios - 如果我已经声明了函数返回类型,我是否应该“输入断言”返回的数据?

我已经用函数声明了变量,我想在onclick事件中调用该变量

谁能告诉我为什么我的代码将我的 Z 数组返回为 0?(CUDA C)

谁能告诉我为什么它显示数组为空?

谁能告诉我为什么8> 7 <6 = true?

为什么做出反应告诉我意外的标记“”

为什么AS告诉我`(ob instanceof Button)`总是`false`?

为什么ReSharper告诉我“隐式捕获关闭”?

为什么AWS告诉我BucketAlreadyExists不存在?

为什么sudo告诉我密码错误?

谁能告诉我为什么不返回该值?

请谁能告诉我为什么输出是这样的?(蟒蛇)