Ich versuche, eine Sequenz beginnend mit ATG und stoppen mit TAG, TAA oder TGA aus einer Textdatei.In Perl, warum bekomme ich "nicht initialisierten Wert in Mustervergleich (m //)", wenn ich versuche, zu überprüfen, ob eine Variable zwei Muster entspricht?
Ich erhalte die Fehlermeldung
Verwendung von nicht initialisierten Wert $ _ in Mustererkennung (m //) in Zeile 12
und es zählt jede Zeile nicht nur die, die ich will.
Ich denke, es ist etwas falsch, wie ich die regulären Ausdrücke verwende, aber ich weiß nicht wie.
use strict;
use warnings;
my $test = "Bin.txt";
my $count = "0";
sub ORF {
my ($file) = @_; # reading file in
open (my $FH, "<", $file) or die "Can't open $file: $!";
while (my $line = <$FH>) { #reading each line of file
if ($line = ((~/^ATG/) and (~/TAG$|TAA$|TGA$/))) { # looking for sequence with ATG at the beginning and TAG,TAA,TGA at the end
$count = $count +1; # counting these sequences
}
}
}
ORF $test;
print $count;
Dank! Das war sehr hilfreich (und macht sehr viel Sinn). –
* 'Was falsch daran ist, immer' $ vars '' * zu zitieren, geht darum, doppelte Anführungszeichen um Variablen zu setzen, nicht um numerische Konstanten, was eine viel geringere Sünde ist. Und danke, dass Sie den passenden Pre-Increment-Operator anstelle des allgegenwärtigen Post-Increments verwenden – Borodin