Schauen wir uns mal an, was Du bisher hast...
Code:
print "Please type the filename of your input file:= ";
chomp ($dnafilename=<STDIN>);
open(INPUT,'<',$dnafilename) or die ("$dnafilename Can not open file\n");
close(INPUT);
Du öffnest die Datei und schließt sie gleich wieder. Das [tt]close(INPUT);[/tt] solltest Du rausnehmen.
Code:
print "Please type in the name of your txt file:= ";
chomp (@array=<STDIN>);
open (INPUT,"<$txtfile") or die ("$txtfile Can not open file\n");
close(INPUT);
Woher kommt [tt]$txtfile[/tt]??
Du solltest Dir auch mal dringend http://wiki.perl-community.de/Wissensbasis/UseStrict anschauen.
Und Du benutzt zum zweiten Mal "INPUT" als Namen für einen Filehandle. Das solltest Du nicht machen.
Es ist kein Filehandle mit dem Namen "INPUT" offen. Hier solltest Du eine Fehlermeldung bekommen.
Code:
#print $_;
@temp=(@temp,$_);
So etwas schreibt man besser als [tt]push @temp, $_;[/code]. Aber wenn Du alle Zeilen der Datei in einem Array haben möchtest, kannst DU auch statt der while-Schleife einfach
Code:
my @lines = <INPUT>;
schreiben.
Was willst Du mit dieser Schleife erreichen??
Code:
#print $_;
@temp=(@temp,$_);
}
do{
print "What is the motif you are searching for?\n" ;
$motif=<STDIN>;
$temp=0;
chomp $motif;
if (exists $txtfile{$motif})
Hier arbeitest Du auf einmal mit einem Hash. Wo kommt der her?
Code:
{
($recognition_site, $regexp)=split(" ", $motif);
@locations=match_positions($regexp);
Woher kommt [tt]$regexp[/tt]??
[code]
while(<@temp>)
{
if($_=~ /$motif/ig)
{
push (@positions, pos($_) -length($&)+1);
}
}
Mit <...> liest Du von einem Filehandle! Wenn die Zeilen einer Datei in @temp stecken und Du nach $motif in diesen Zeilen suchen willst, musst Du Du
Code:
for my $zeile ( @temp ) { ... }
benutzen.
$& zu verwenden ist nicht gut, weil damit alle Regulären Ausdrück relativ langsam werden. Den if-Teil würde ich so schreiben:
Code:
if( my ($treffer) = $_ =~ /($motif)/ig) # bzw. $zeile statt $_
{
push @positions, pos($_) - length($treffer)+1;
}
Lesezeichen