Hey,
system("mysqldump --all -e -l --add_drop_table -h $host -u $user -p"$pass" $db > $file");
> Hostname, Datenbankname, User und Passwort stimmen
sicher? Benutze `print`{:.language-perl} statt `system`{:.language-perl} und vergewissere dich, dass tatsächlich in den Variablen steht, was du denkst, was drin stehen sollte, und dass der String so zusammengesetzt ist, wie er sein sollte.
Nebensächlicher Hinweis zum Stil: in Perl ist es nie notwending, stringbegrenzende Operatoren zu maskieren, weil sehr viele alternative zur Verfügung stehen. Bspw. lässt sich
~~~perl
"... \"foo\" ..."
lesbarer schreiben als
qq(... "foo" ...)
qq{... "foo" ...}
qq[... "foo" ...]
qq!... "foo" ...!
qq|... "foo" ...|
qq/... "foo" .../
~~~ etc. Siehe <http://perldoc.perl.org/perlop.html#qq%2fSTRING%2f-qq-quote%2c-double-%22-%22%22>
> hab mit `or die(...)`{:.language-perl} auch keine Fehlermeldung erhalten.
`system`{:.language-perl} liefert nicht unwahr bei einem Fehler zurück wie die meisten anderen Funktionen, deswegen kannst du dieses Idiom nicht verwendet. <http://perldoc.perl.org/functions/system.html> Prüfe stattdessen `$?`{:.language-perl} und `$!`{:.language-perl}.
--
水-金-地-火-木-土-天-海-冥