Bleibt nur noch die Frage warum MySQL nicht direkt das PREPARE angemängelt hat.
Die Fehlermeldung wurde wegen Misslingens der Funktion $dbh->prepare() ausgegeben.
my $dbh=DBI->connect("DBI:mysql:base:localhost","base",'aha') or die "Fehler bei der Datenbankverbindung: $DBI::errstr";
my $insert=$dbh->prepare("INSERT INTO teilnehmer (lfdnr,ano,vorname,zuname,strasse,plz,ort,alter,sex,teilnahme,email,datum) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)") || die $DBI::errstr;
$insert->execute($lfn,$ano,$vorname,$zuname,$strasse,$plz,$ort,$alter,$sex,$teilnahme,$email,$unix) || die $DBI::errstr;
Die Fehlermeldung kommt ja wohl ganz offenkundig aus dem execute():
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'alter,sex,teilnahme,email,datum) VALUES ('1004','anonym','a','a','a','a','a','2'' at line 1 at zum_ausflippen.pl line 37."
Dabei kommt aber kein PREPARE-Statement zur Anwendung.
Klar, es geht nicht um prepared statements, wie von Dir behauptet, vgl. auch http://search.cpan.org/~timb/DBI-1.53/DBI.pm
Insofern gehen auch weitere Ausführungen zum Thema Deinerseits (Ausnahme: Dein Hinweis auf "alter" war durchaus richtig :) an der Sache vorbei:
"Das ist irrelevant. ...", "Das war das tatsächlich versandte SQL-Statement. ..." ( https://forum.selfhtml.org/?t=144863&m=939807 )
Somit sollte nach einem bind_param() - wie von uns angeregt - dieses hier im Forum für Analysezwecke angegeben werden.