我编写了一个读取文件的简短 Perl 脚本。看tmp.txt
:
1 gene_id "XLOC_000001"; gene_name "DDX11L1"; oId
1 gene_id "XLOC_000001"; gene_name "DDX11L1"; oId
1 gene_id "XLOC_000001"; gene_name "DDX11L1"; oId
1 gene_id "XLOC_000001"; gene_name "DDX11L1"; oId
我的 Perl 程序,convert.pl
is :
use warnings;
use strict;
use autodie; # die if io problem with file
my $line;
my ($xloc, $gene, $ens);
open (IN, "tmp.txt")
or die ("open 'tmp.txt' failed, $!\n");
while ($line = <IN>) {
($xloc, $gene) = ($line =~ /gene_id "([^"]+)".*gene_name "([^"]+)"/);
print("$xloc $gene\n");
}
close (IN)
or warn $! ? "ERROR 1" : "ERROR 2";
它输出:
Name "main::IN" used only once: possible typo at ./convert.pl line 8.
XLOC_000001 DDX11L1
XLOC_000001 DDX11L1
XLOC_000001 DDX11L1
XLOC_000001 DDX11L1
I used IN
,所以我不明白Name "main::IN" used...
警告。它为什么抱怨?
这在下面提到BUGS https://metacpan.org/pod/autodie#BUGS汽车模具部分
当 autodie 或 Fatal 与包文件句柄(例如 FILE)一起使用时,可能会生成“仅使用一次”警告。强烈建议使用标量文件句柄.
use diagnostics;
says:
名称“main::IN”仅使用一次:test.pl 第 9 行(#1)可能存在拼写错误
(W 一次)印刷错误通常显示为唯一的变量名称。
如果您有充分的理由拥有一个独特的名字,那么只需提及
它再次以某种方式压制该消息。我们的宣言也是
为此目的而提供。
注意:此警告检测仅使用过的包符号
一次。这意味着词法变量永远不会触发此警告。
这也意味着所有包变量 $c、@c、%c 以及
*c、&c、sub c{}、c() 和 c(文件句柄或格式)被视为相同;如果程序仅使用 $c 一次但也使用任何
其他的则不会触发此警告。以 an 开头的符号
下划线和使用特殊标识符的符号(q.v. perldata)是
免除此警告。
因此,如果您使用词法文件句柄,那么它不会发出警告。
use warnings;
use strict;
use autodie; # die if io problem with file
use diagnostics;
my $line;
my ($xloc, $gene, $ens);
open (my $in, "<", "tmp.txt")
or die ("open 'tmp.txt' failed, $!\n");
while ($line = <$in>) {
($xloc, $gene) = ($line =~ /gene_id "([^"]+)".*gene_name "([^"]+)"/);
print("$xloc $gene\n");
}
close ($in)
or warn $! ? "ERROR 1" : "ERROR 2";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)