Friday, May 08, 2009

Meine CPAN-Module - Teil 1

Durch Yuval Kogman inspiriert, werde ich hier in der nächsten Zeit immer mal wieder über meine CPAN-Module schreiben. Dabei werde ich nicht nur die Funktionen beschreiben - dafür gibt es ja die Doku ;-) - sondern auch warum ich das geschrieben habe.

Da gibt's auch Module, die vielleicht nicht optimal sind...

Denn Anfang mache ich heute mit den ersten Modulen, die ich geschrieben habe: Bio::FASTASequence und Bio::FASTASequence::File. Beide Module sind ganz am Anfang meiner "Perl-Karriere" entstanden, als ich bei einer Firma im Industriepark Höchst meine Ausbildung in der Bio-Informatik gemacht habe.

Da tauchte immer wieder die Aufgabe auf, Dateien mit FASTA-Sequenzen zu parsen. Am Anfang alles im Skript selbst (als Perl-Autodidakt kennt man Module noch nicht gleich), dann habe ich in meiner Freizeit die erste Version des Moduls geschrieben.

Warum kein BioPerl? Weil ich es da noch nicht kannte - und später war mein Modul zu sehr an das ganze System angepasst.

Das Modul dient also dazu, Informationen über FASTA-Sequenzen herauszufinden. Diese Informationen wurden weiterverarbeitet.

Wer sich den Code anschaut, wird sofort erkennen, dass das jemand geschrieben hat, der noch nicht allzu lange mit Perl programmiert hat. Da ich aber nicht mehr in der Bio-Informatik unterwegs bin, werde ich da auch nicht mehr allzu viel dran ändern.

Jetzt aber mal etwas zur Funktion des Moduls - an Hand eines kleinen Beispiels:

#!/usr/bin/perl

use strict;
use warnings;
use Bio::FASTASequence;

my $sequence = qq~>sp|P01815|Beschreibung.
QVTLRESGPALVKPTQTLTLTCTFSGFSLSSTGMCVGWIRQPPGKGLEWLARIDWDDDKY
YNTSLETRLTISKDTSRNQVVLTMDPVDTATYYCARITVIPAPAGYMDVWGRGTPVTVSS~;

my $object = Bio::FASTASequence->new($sequence);
my @cysteins =

print 'The sequence of ' . $object->getAccessionNr .
' is ' . $object->getSequence ,"\n",
'This sequence contains ', scalar( @{ $object->allIndexesOf('C') } ),
' Cysteins at the positions ';

print $_+1, ', ' for @{$object->allIndexesOf('C') };

Bio::FASTASequence ermöglicht das Parsen einer einzelnen Sequenz. Möchte man ganze Dateien einlesen, kann man Bio::FASTASequence::File verwenden.

Das Modul eignet sich ganz gut, wenn man nur mal Dateien im FASTA-Format schnell parsen will, ohne sich in die Tiefen von BioPerl zu graben. Für größere Sachen empfehle ich aber BioPerl (das ich dann später in anderen Projekten auch selbst verwendet habe).

No comments: