Ich möchte eine Liste von eindeutige IDs erstellen. Da einige der IDs sind Duplikate, muss ich am Ende eine Nummer hinzufügen, um sie einzigartig zu machen, etwa so:Wie generiert man ein Array mit einem Zähler in Perl?
ID = exon00001
ID = exon00002
ID = exon00003
ID = exon00004
Hier ist was ich bisher habe.
while (loop through the IDs) {
# if $id is an exon, then increment the counter by one and add it
# to the end of the ID
if ($id =~ m/exon/) {
my $exon_count = 0;
my @exon = $exon_count++; #3
$number = pop @exon; # removes the first element of the list
$id = $id.$number;
print $id."/n"
}
}
Grundsätzlich möchte ich ein Array mit einem Zähler dynamisch generieren. Es soll ein Array (1, 2, 3, 4, ...) für die Gesamtzahl der Exons erstellen, dann die Elemente entfernen und zur Zeichenkette hinzufügen. Dieser Code funktioniert nicht ordnungsgemäß. Ich denke, mit Zeile 3 stimmt etwas nicht. Weißt du das? Irgendwelche Ideen? danke
Mein $ exon_count ist innerhalb der Schleife und jedes Mal auf Null gesetzt. Verschieben Sie die Deklaration vor die Schleife. Dann wird es durch die Schleife inkrementieren.Außerdem würde ich einfach $ exon_count direkt verwenden, anstatt die ganze Arbeit zu tun, um es einem Array zuzuordnen und es dann in eine Nummer zu legen, oder einfach Nummer zu verwenden und es stattdessen zu erhöhen. – Glenn
Ihr Code ist mit Fehlern gespickt und selbst wenn es kompilieren würde, würde es nicht tun, was Sie denken. Zum Beispiel: Das '$ exon_count' wird jedes Mal zurückgesetzt, wenn ein neues Exon gefunden wird, Sie ordnen einem Array einen einzelnen Wert (immer 0, weil ++ danach ausgewertet wird) zu,' pop' entfernt das * letzte * Element eines *. Array *, und '"/n "' wird einen Schrägstrich und "n", wenn Sie Newline möchten, müssten Sie "" \ n "'. – TLP
Um hinzuzufügen, was diese Leute sagten, 'shift' entfernt das * first * Element aus der Liste,' pop' entfernt das * last * - aber es entfernt das "oberste" Element eines Stapels, aber das ist ein * Stapel *, keine * Liste *. – Axeman