ciao,

eccoti un esempio funzionante.

In realtà però dovessi mettere io il codice in produzione farei diversamente,
con soluzioni differenti anche a seconda della grandezza dei files che sto elaborando:
se il file pesasse pochi kb per esempio leggerei tutto il file in una volta ed
effettuerei le sostituzioni cercando di individuare un pattern riccorente;
se invece il file pesa molto, probabilmente leggerei da un file e simultaneamente
scriverei in un altro, in modo da svuotare sempre il buffer...

è comunque il bello del Perl: There's more than one way to do it (TIMTOWTDI:
http://en.wikipedia.org/wiki/There%2...e_way_to_do_it).

Ho voluto invece mantenere il tuo schema di lavoro, anche considerando che
si tratta di un esempio per imparare.

Ho ragionato così:
il simbolo "> nome" mi delimita l'inizio di una sequenza e la riga stessa
indica il nome dell'animale;
nelle righe successive non posso sapere se si tratta di una sequenza di
DNA finito o se ci sarà un'altra riga con un altro pezzo di DNA.
Devo quindi attendere che si ripresenti un simbolo "> nome":
solo allora posso stampare la sequenza precedente;

Procedo quindi così:
- ogni volta che si presenta ">nome":
stampo la sequenza precedente;
parte una nuova sequenza (aumento il contatore), le variabili contenenti dna e rna non
sono ancora inizializzate;

- ogni volta che c'è una sequenza di dna:
concateno una stringa.

Ecco qui:






codice:
my $argc = $#ARGV + 1;
if ($argc < 1) {
	print "usage: sequenza.txt";
	print "\n\n";
	exit 1
}
#se non è verificata la condizione di prima e quindi il programma ha letto bene l'imput stampa OK
else {
	print "OK\n";
}

my $accFile = $ARGV[0];
my $a = 1;
open(DNA, $accFile) or die("infile non trovato");

$num=0;
$dna=undef;
$rna=undef;

while ($c = <DNA> ) {

	chomp($c); # elimino gli a capo


	if (  $c =~ /^>/   || eof(DNA) ){ #devo stampare la sequenza del dna anche quando è finito il file...

		if ( $num>0 ) { # la prima volta che si entra in questo ciclo, le variabili sono vuote: non c'è bisogno di stampare;
		# prova a togliere questo if e vedi che la prima sequenza sarà vuota;

			print "sequenza: $num\n";
			print "DNA: $dna\n";
			print "AFTER SUBSTITUTION:\n";
			print "RNA: $rna\n";
			print "\n";
		}

		$dna=undef; #svuoto le variabili, non indispensabile...
		$rna=undef;
		$num++;

	}
	else
	{
		$dna.=$c; # concateno la sequenza di dna;
		$c =~ s/T/U/g; # sostituisco. In realta' potrei non memorizzare rna e effettuare la sotituzione direttamente nell'if.
		$rna.=$c;

	}

}