BEGIN { my $dbh = DBI->connect(...) or die DBI->errstr; my $sth = $dbh->prepare( qq( SELECT price_type_id, price_type_label FROM price_type ) ) or die $dbh->errstr; $sth->execute or die $sth->errstr; my $data = $sth->fetchall_arrayref or die $sth->errstr; for my $row (@$data) { my ($id, $label) = @{$row}; my $name = lc($label); $name =~ s/\s/_/; eval qq( sub $name { return shift->get_price($id); } ); } }