From efe79ffd849837e638afa88179e232b2d0ebdaf5 Mon Sep 17 00:00:00 2001 From: David Miguel Susano Pinto Date: Fri, 26 Apr 2024 13:33:32 +0100 Subject: [PATCH] Bio::Tools::CodonTable and Bio::Tools::IUPAC: use our and drop BEGIN blocks. In a73febe9 the CodonTable variables moved from a BGEIN to an INIT block. The IUPAC module also used a BEGIN block and uses CodonTable which led to errors (failing tests in t/SeqTools/Backtranslate.t). Replacing 'use vars' with 'our' and completely dropping the BEGIN/INIT blocks, fixes the problem. --- lib/Bio/Tools/CodonTable.pm | 10 +-- lib/Bio/Tools/IUPAC.pm | 188 ++++++++++++++++++++++---------------------- 2 files changed, 97 insertions(+), 101 deletions(-) diff --git a/lib/Bio/Tools/CodonTable.pm b/lib/Bio/Tools/CodonTable.pm index 2d702733d..42fbe69eb 100644 --- a/lib/Bio/Tools/CodonTable.pm +++ b/lib/Bio/Tools/CodonTable.pm @@ -181,8 +181,6 @@ methods. Internal methods are usually preceded with a _ package Bio::Tools::CodonTable; -use vars qw(@NAMES @TABLES @STARTS $TRCOL $CODONS %IUPAC_DNA $CODONGAP $GAP - %IUPAC_AA %THREELETTERSYMBOLS $VALID_PROTEIN $TERMINATOR); use strict; # Object preamble - inherits from Bio::Root::Root @@ -190,11 +188,12 @@ use Bio::Tools::IUPAC; use Bio::SeqUtils; use base qw(Bio::Root::Root); +our (@NAMES, @TABLES, @STARTS, $TRCOL, $CODONS, %IUPAC_DNA, $CODONGAP, $GAP, + %IUPAC_AA, %THREELETTERSYMBOLS, $VALID_PROTEIN, $TERMINATOR); -# first set internal values for all translation tables -# XXX: I'm not sure why it needs to be on an INIT block :/ -INIT { +# set internal values for all translation tables +{ use constant CODONSIZE => 3; $GAP = '-'; $CODONGAP = $GAP x CODONSIZE; @@ -281,6 +280,7 @@ INIT { parse_gc_prt(); undef &parse_gc_prt; + my @nucs = qw(t c a g); my $x = 0; ($CODONS, $TRCOL) = ({}, {}); diff --git a/lib/Bio/Tools/IUPAC.pm b/lib/Bio/Tools/IUPAC.pm index 1d33986ca..5f2b5b900 100644 --- a/lib/Bio/Tools/IUPAC.pm +++ b/lib/Bio/Tools/IUPAC.pm @@ -167,104 +167,100 @@ package Bio::Tools::IUPAC; use strict; use base qw(Bio::Root::Root); -use vars qw(%IUB %IUB_AMB %REV_IUB %IUP %IUP_AMB $AUTOLOAD); - -BEGIN { - # Ambiguous nucleic residues are matched to unambiguous residues - %IUB = ( - A => [qw(A)], - C => [qw(C)], - G => [qw(G)], - T => [qw(T)], - U => [qw(U)], - M => [qw(A C)], - R => [qw(A G)], - S => [qw(C G)], - W => [qw(A T)], - Y => [qw(C T)], - K => [qw(G T)], - V => [qw(A C G)], - H => [qw(A C T)], - D => [qw(A G T)], - B => [qw(C G T)], - N => [qw(A C G T)], - X => [qw(A C G T)], - ); - # Same as %IUB but ambiguous residues are matched to ambiguous residues only - %IUB_AMB = ( - M => [qw(M)], - R => [qw(R)], - W => [qw(W)], - S => [qw(S)], - Y => [qw(Y)], - K => [qw(K)], - V => [qw(M R S V)], - H => [qw(H M W Y)], - D => [qw(D K R W)], - B => [qw(B K S Y)], - N => [qw(B D H K M N R S V W Y)], +# Ambiguous nucleic residues are matched to unambiguous residues +our %IUB = ( + A => [qw(A)], + C => [qw(C)], + G => [qw(G)], + T => [qw(T)], + U => [qw(U)], + M => [qw(A C)], + R => [qw(A G)], + S => [qw(C G)], + W => [qw(A T)], + Y => [qw(C T)], + K => [qw(G T)], + V => [qw(A C G)], + H => [qw(A C T)], + D => [qw(A G T)], + B => [qw(C G T)], + N => [qw(A C G T)], + X => [qw(A C G T)], +); + +# Same as %IUB but ambiguous residues are matched to ambiguous residues only +our %IUB_AMB = ( + M => [qw(M)], + R => [qw(R)], + W => [qw(W)], + S => [qw(S)], + Y => [qw(Y)], + K => [qw(K)], + V => [qw(M R S V)], + H => [qw(H M W Y)], + D => [qw(D K R W)], + B => [qw(B K S Y)], + N => [qw(B D H K M N R S V W Y)], ); - # The inverse of %IUB - %REV_IUB = ( - A => 'A', - T => 'T', - U => 'U', - C => 'C', - G => 'G', - AC => 'M', - AG => 'R', - AT => 'W', - CG => 'S', - CT => 'Y', - GT => 'K', - ACG => 'V', - ACT => 'H', - AGT => 'D', - CGT => 'B', - ACGT => 'N', - N => 'N' - ); - - # Same thing with proteins now - %IUP = ( - A => [qw(A)], - B => [qw(D N)], - C => [qw(C)], - D => [qw(D)], - E => [qw(E)], - F => [qw(F)], - G => [qw(G)], - H => [qw(H)], - I => [qw(I)], - J => [qw(I L)], - K => [qw(K)], - L => [qw(L)], - M => [qw(M)], - N => [qw(N)], - O => [qw(O)], - P => [qw(P)], - Q => [qw(Q)], - R => [qw(R)], - S => [qw(S)], - T => [qw(T)], - U => [qw(U)], - V => [qw(V)], - W => [qw(W)], - X => [qw(X)], - Y => [qw(Y)], - Z => [qw(E Q)], - '*' => [qw(*)], - ); - - %IUP_AMB = ( - B => [qw(B)], - J => [qw(J)], - Z => [qw(Z)], - ); - -} +# The inverse of %IUB +our %REV_IUB = ( + A => 'A', + T => 'T', + U => 'U', + C => 'C', + G => 'G', + AC => 'M', + AG => 'R', + AT => 'W', + CG => 'S', + CT => 'Y', + GT => 'K', + ACG => 'V', + ACT => 'H', + AGT => 'D', + CGT => 'B', + ACGT => 'N', + N => 'N' +); + +# Same thing with proteins now +our %IUP = ( + A => [qw(A)], + B => [qw(D N)], + C => [qw(C)], + D => [qw(D)], + E => [qw(E)], + F => [qw(F)], + G => [qw(G)], + H => [qw(H)], + I => [qw(I)], + J => [qw(I L)], + K => [qw(K)], + L => [qw(L)], + M => [qw(M)], + N => [qw(N)], + O => [qw(O)], + P => [qw(P)], + Q => [qw(Q)], + R => [qw(R)], + S => [qw(S)], + T => [qw(T)], + U => [qw(U)], + V => [qw(V)], + W => [qw(W)], + X => [qw(X)], + Y => [qw(Y)], + Z => [qw(E Q)], + '*' => [qw(*)], +); + +our %IUP_AMB = ( + B => [qw(B)], + J => [qw(J)], + Z => [qw(Z)], +); =head2 new @@ -550,6 +546,7 @@ sub regexp { sub AUTOLOAD { my $self = shift @_; + our $AUTOLOAD; my $method = $AUTOLOAD; $method =~ s/.*:://; return $self->{'_seq'}->$method(@_) @@ -557,4 +554,3 @@ sub AUTOLOAD { } 1; - -- 2.11.4.GIT