hai ragione! è una mia svista!
Siccome l'ultima riga è anche quella della chiusura del file,
non entrerà mai nell'else concatenando le stringhe di gatto.
In pratica la fine del file (eof) dovrebbe svolgere due compiti:
stampare il risultato e concatenere le stringhe.
Essendo stati da me messi in alternativa (if ... else)  non verranno mai
eseguiti entrambi i compiti.
E' opportuno modificare un po' il codice:
	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
/*** assegno le variabili ***/
	unless (  $c =~ /^>/  )	{  # ogni volta che la riga non comincia con > concateno
		$dna.=$c; # concateno la sequenza di dna;
		$c =~ s/T/U/g; # sostituisco. In realta' potrei non memorizzare rna effettuare la sostituzione direttamente nell'if.
		$rna.=$c;
	}
/**** sequenza di stampa ***/
	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++;
	}
}
 
	
		
			
			
				Comunque delle tue correzioni non riesco a capire fino in fondo il significato dell'estruzione || eof(DNA)
e della concatenazione della sequenza di DNA e RNA...dovrebbe servire a concatenare le sequenze se si va a capo?
			
		
 
	 
 
In pratica ho diviso il codice in due fasi che prima erano alternative (Vedi l'errore dell'if... else di cui sopra) e ora invece sono indipendenti.
La concatenazione è appunto per evitare l'a-capo:
soltanto quando hai l'intera sequenza del DNA (che magari è su piu' righe) puoi operare,
quindi hai bisogno di leggere una riga, concatenere, leggere l'altra riga, concatenere se necessario, oppure stampare.
Per quel che riguarda la stampa siccome tutto quello che non è "> nome" è DNA,
l'unico modo per capire quando è finita una sequenza di DNA è la presenza di una stringa "> nome".
Così quando sono in presenza di "> nome", stampo la sequenza precedente. Con due eccezioni:
1. la prima volta che compare ">nome", non c'è nessuna sequenza precedente
(potresti anche scrivere:  
	codice:
	next if ($num==0);
 
 ), quindi si va avanti;
2. quando sei alla fine del file NON esisterà nessuna sequenza successiva, quindi la sequenza precedente
alla fine del file va stampata: ecco perché