3

ファイルを読み込む短い 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は次のとおりです。

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 

を使っていたので、警告INがわかりません。Name "main::IN" used...なぜそれは不平を言っているのですか?

4

2 に答える 2

2

のせいだと確信していautodieます。

正確な理由はわかりませんが、削除すると消えます。

読むperldoc autodieと、次のことがわかります。

バグ^

autodie または Fatal がパッケージ ファイルハンドル (FILE など) で使用されると、「一度だけ使用」という警告が生成されることがあります。代わりに、スカラー ファイルハンドルを強くお勧めします。

or dieそれは、それを処理しようとするのではなく、処理されている方法によるものだと思いますautodie

ただし、 3 引数を使用する方がはるかに優れたスタイルになることもお勧めしますopen

open ( my $input, '<', 'tmp.txt'); 

そして、またはのいずれ autodieor die。告白しなければなりませんが、プロセスがopen.

于 2016-10-10T12:55:00.950 に答える