ragazzi, vi posto un codice che non capisco perchè mi genera tremila errori...mi aiutate??? sto cercando di imparare, ma mi sa che ho bisogno di aiuto

codice:
my $cosa= $ARGV[0]; #gestisce l'output
my $lungPSW= $ARGV[1]; #gestisce la lunghezza della PSW
my $numDiPSW=$ARGV[2]; #gestisce il numero di PSW da creare

BEGIN { srand() if $] < 5.004 } #avvia srand se la versione del compilatore
                                #è inferiore alla 5.004
                                
if($cosa eq 'file'){subfile($lungPSW,$numDiPSW);} #se si vuole scrivere su file
elsif($cosa eq 'schermo'){subschermo($lungPSW,$numDiPSW);}#se si vuole scrivere su schermo
else{die "Parametro errato: ".$a." al posto di file o schermo";}#errore

sub subfile(){ #sub che scrive su file
  $len=$_[0]; #accetta il parametro della lunghezza
  $times=$_[1]; #accetta il numero delle volte che deve generare le password
  print "Inserisci il file: ";
  chomp($path=<STDIN>); #aquisisce l'indirizzo del file
  open PSW, ">", $path;
  for($i=1;$i<=$times;$i++){
    $p=genera($lung);
    print PSW $p;}
  close PSW;
  }
  
sub subschermo(){ #sub per scrivere su schermo
  $len=$_[0]; #accetta il parametro della lunghezza
  $times=$_[1]; #accetta il numero delle volte che deve generare le password
  for($i=1;$i<=$times;$i++){
    $p=genera($len);
    print "$p\n";}
  }
  
sub genera(){
$lung= shift;
for($i=1;$i<=$lung;$i++){ #e ripete la generazione finchè non raggiunge 
                            #le volte richieste
    $n=rand 200;
    if($n%3==0){ #se è multiplo di tre mettiamo una lettera
      if($n<=100){ #mettiamo una lettera maiuscola
        $k=int(rand(25));
        $k+=65;
        $m=chr($k);
      }
      else{ #mettiamo una lettera minuscola
        $k=int(rand(25));
        $k+=97;
        $m=chr($k);
      }
    }
    else{ #se non è multiplo di tre mettiamo un numero
      $m=int(rand(10));
      $m+=48;
     }
    $PSW=$PSW.$m; #aggiunge alla password l'ultimo carattere appena creato
    }
  $fin=substr($PSW,0,$lung); #estrae una sottostringa in modo da avere una psw 
                             #della lung richiesta
}