Ihnen fehlen ein paar Schritte. Verwenden Sie den Befehl PASSWORD() und verwenden Sie 'admin' und nicht 'root' und fügen Sie auch Flush-Privilegs hinzu. Ich habe das Skript für Sie neu geschrieben, hier:
#!/usr/bin/perl
use DBI;
use strict;
my $newpass = "newpass";
my $driver = "mysql";
my $database = "mysql";
my $dsn = "DBI:$driver:database=$database";
my $dbh = DBI->connect($dsn, 'root', 'mysql' ) or die $DBI::errstr;
$dbh->{AutoCommit} = 0;
my $sth = $dbh->prepare("update user set password=PASSWORD('$newpass') where User='root'");
$sth->execute() or die $DBI::errstr;
$dbh->do('FLUSH PRIVILEGES') or die $DBI::errstr;
$sth->finish();
$dbh->commit or die $DBI::errstr;