Una delle cose più interessanti per me è usare Perl per la generazione del codice. Soprattutto quando arrivano altre lingue. Ho scritto diversi piccoli script per generare classi C++ e codice Java.
Indietro quando ero un neofita Perl. Ho scritto questo pezzo di codice, che ha generato file di schemi basati sul nostro database. Circa 2 ore dopo ho scoperto che non avevo bisogno di farlo per DBIx::Class. Questo non è un grande codice Perl (non votarmi per questo, è solo un esempio), ma ha generato esattamente come 200 file di schema per me.
my @db = `mysql -u XXXXX -pXXXXX --skip-column-names -e "show databases;"`;
foreach my $db_name (@db) {
chomp($db_name);
my @tables = `mysql -u XXXXX -pXXXXX --skip-column-names -e "use $db_name; show tables;"`;
$_ =~ s/\n// foreach(@tables);
unless (-e "$db_name.pm") {
open(DBFILE, '>', "$db_name.pm");
print DBFILE "package mysql::schemes::$db_name;\n";
print DBFILE "use base qw/DBIx::Class::Schema/;\n\n";
print DBFILE '__PACKAGE__->load_classes(qw/' . join(' ', @tables) . "/);\n\n";
print DBFILE "1;";
close(DBFILE);
}
mkdir $db_name unless (-d $db_name or -e $db_name);
foreach my $table_name (@tables) {
my @columns = `mysql -u XXXX -pXXXX --skip-column-names -e "USE $db_name; desc \\\`$table_name\\\`;"`;
$_ =~ s/\n$// foreach(@columns);
my (@names, $primary_key);
foreach (@columns) {
my ($name, $type, $null, $key, $default) = split(/\t/, $_);
chomp($default);
push(@names, $name);
$primary_key = $name if($key ne '');
}
unless (-e "$db_name/$table_name.pm") {
open(TBFILE, '>', "$db_name/$table_name.pm");
print TBFILE "package mysql::schemes::" . $db_name . "::" . $table_name . ";\n";
print TBFILE "use base qw/DBIx::Class/;\n\n";
print TBFILE "__PACKAGE__->load_components(qw/PK::Auto Core/);\n";
print TBFILE "__PACKAGE__->table('$table_name');\n";
print TBFILE "__PACKAGE__->add_columns(qw/" . join(' ', @names) . "/;\n";
print TBFILE "__PACKAGE__->set_primary_key('$primary_key');\n\n" unless($primary_key eq '');
print TBFILE "1;";
close(TBFILE);
}
}
}
fonte
2009-03-04 17:49:53
Francamente, sarei stupito se vedessi il codice Perl che non sembrava che qualcuno avesse vomitato sullo schermo;) –
Kent, gratis gratis per guardare uno qualsiasi dei miei codice su CPAN, quindi. –