Grazie ragazzi mi ero scordato del post...

Si credo che alla fine mi dovrò fare un controllino con my $pagato = $_[0]; print $pagato;.

Se usi il moduli strict e sei riuscito ad eseguire lo script allora la variabile esiste. Però può essere definita o non definita.
Si programmo sempre con strict ho inziato con tutorial che consigliavano questa cosa e ho sempre fatto così. In realtà uso un framework che utilizza mod_perl semplificandomi molto l'integrazione anche con pagine complesse.

In effetti credo che con my $pagato = $_[0]; (esista o meno $_[0]) la variabile $pagato per qualche motivo che ignoro sia non falsa.

codice:
sub funzionemia {
    my $pagato; # uso strict
    $_[0] ? $pagato = '1' : $pagato = '0';
    
    # sql + dbi
    # etc etc
}
oppure meglio ancora
codice:
sub funzionemia {
    my $pagato; # uso strict
    defined($_[0]) ? $pagato = '1' : $pagato = '0';
    
    # sql + dbi
    # etc etc
}