Anzitutto quando si inserisce un codice e` opportuno usare i tag VB, altrimenti si perde la formattazioine e la cosa diventa piu` difficile da capire:
codice:
my $input = shift;         # legge il primo input e lo salva nella variabile $input
my $corpus_joyce = shift;       # legge il secondo input e salva in $corpus_joyce
open CORPUS,$corpus_joyce;      # apre il file indicato dal secondo input

while (<CORPUS> ) {                              # loop sul file aperto - legge una riga
  $input = $_;                                       # salva la riga letta in $input (in questo modo sovrascrive la variabile)
  if ($input =~/Ulisses/) { print $input; }    # cerca se nella riga letta c'e` la parola Ulisses e stampa la riga
  elsif ($input =~/Dedalus/) { print $input; }   # se non c'e` Ulisses, cerca se c'e` Dedalus
}
close CORPUS
Nota che se in una singola riga c'e` Ulisses, non cerca se c'e` Dedalus, ma se nella singola riga non c'e` Ulisses, va a cercare Dedalus.

Forse il tuo intnto era una cosa del genere:
codice:
my $input = shift;         # legge il primo input e lo salva nella variabile $input
my $corpus_joyce = shift;       # legge il secondo input e salva in $corpus_joyce
my $line = "";                  # prepara una variabile da usare nel loop

open CORPUS,$corpus_joyce;      # apre il file indicato dal secondo input

if($input eq 'Ulisses') {
  while ($line = <CORPUS> ) {                              # loop sul file aperto - legge una riga e slava in $line
    if ($line =~/Ulisses/ ) { print $input; }    # cerca se nella riga letta c'e` la parola Ulisses e stampa la riga
  }
} elsif($input eq 'Dedalus') {
  while ($line = <CORPUS> ) {                              # loop sul file aperto - legge una riga e slava in $line
    if ($line =~/Dedalus/ ) { print $input; }    # cerca se nella riga letta c'e` la parola Ulisses e stampa la riga
  }
}
close CORPUS
Ci potrebeb anche essere il modo di scrivere qualcosa del tipo:
if ($line ~=/$input/) { print $input; }
Ma non ricordo piu` come e` la sintassi corretta.