Establecer cada Clase y Declarar las Columnas

 7  package Music::Artist;
 8  use base 'Music::DBI';
 9  Music::Artist->table('artist');
10  Music::Artist->columns(All => qw/artistid name/);
11  Music::Artist->has_many(cds => 'Music::CD');
12
13  package Music::CD;
14  use base 'Music::DBI';
15  Music::CD->table('cd');
16  Music::CD->columns(All => qw/cdid artist title/);
17  Music::CD->has_many(tracks => 'Music::Track');
18  Music::CD->has_a(artist => 'Music::Artist');
19
20  package Music::Track;
21  use base 'Music::DBI';
22  Music::Track->table('track');
23  Music::Track->columns(All => qw/trackid cd title/);
24
25  my $artist = Music::Artist->insert({ name => 'U2' });
26
27  my $cd = $artist->add_to_cds({
28    title  => 'October',
29  });
30
31  $cd->update;

Ejecución:

lhp@nereida:~/Lperl/src/CLASS_DBI$ perl synopsis1.pl
lhp@nereida:~/Lperl/src/CLASS_DBI$ sqlite3 example.db
SQLite version 3.3.8
Enter ".help" for instructions
sqlite> .dump
BEGIN TRANSACTION;
CREATE TABLE artist (
  artistid INTEGER PRIMARY KEY,
  name TEXT NOT NULL
);
INSERT INTO "artist" VALUES(1, 'Michael Jackson');
INSERT INTO "artist" VALUES(2, 'Eminem');
INSERT INTO "artist" VALUES(3, 'U2');
CREATE TABLE cd (
  cdid INTEGER PRIMARY KEY,
  artist INTEGER NOT NULL REFERENCES artist(artistid),
  title TEXT NOT NULL
);
INSERT INTO "cd" VALUES(1, 1, 'Thriller');
INSERT INTO "cd" VALUES(2, 1, 'Bad');
INSERT INTO "cd" VALUES(3, 2, 'The Marshall Mathers LP');
INSERT INTO "cd" VALUES(4, 3, 'October');
CREATE TABLE track (
  trackid INTEGER PRIMARY KEY,
  cd INTEGER NOT NULL REFERENCES cd(cdid),
  title TEXT NOT NULL
);
INSERT INTO "track" VALUES(1, 3, 'The Way I Am');
INSERT INTO "track" VALUES(2, 3, 'Stan');
INSERT INTO "track" VALUES(3, 1, 'Billie Jean');
INSERT INTO "track" VALUES(4, 2, 'Leave Me Alone');
INSERT INTO "track" VALUES(5, 2, 'Smooth Criminal');
INSERT INTO "track" VALUES(6, 1, 'Beat It');
INSERT INTO "track" VALUES(7, 2, 'Dirty Diana');
COMMIT;
sqlite>

lhp@nereida:~/Lperl/src/CLASS_DBI$ cat -n synopsis2.pl
 1  #!/usr/local/bin/perl -w
..  .............................. # like in the former example
25
26  my $cd = Music::Artist->search_like(name => 'Eminem')->first;
27
28  print $cd->artistid,": ",$cd->name,"\n";
29
30  my $first = Music::Artist->retrieve(1);
31  print $first->name,"\n";
32
33  print "CDs\n";
34  for my $cd (Music::CD->retrieve_all) {
35    print "\t",$cd->title,"\n";
36  }

lhp@nereida:~/Lperl/src/CLASS_DBI$ perl synopsis2.pl
2: Eminem
Michael Jackson
CDs
        Thriller
        Bad
        The Marshall Mathers LP

Casiano Rodríguez León
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19