This really is as simple as the recipe "SYNOPSIS" shows. The trick is getting your classes to use this metaclass, and providing some sort of sugar for declaring the table. This is covered in Moose::Cookbook::Extending::Debugging_BaseClassRole, which shows how to make a module like Moose.pm itself, with sugar like has_table().

Accessing this new table attribute is quite simple. Given a class named MyApp::User, we could simply write the following:

my $table = MyApp::User->meta->table;

As long as MyApp::User has arranged to apply the MyApp::Meta::Class::Trait::HasTable to its metaclass, this method call just works. If we want to be more careful, we can check that the class metaclass object has a table method:

$table = MyApp::User->meta->table
if MyApp::User->meta->can('table');

In theory, this is not entirely correct, since the metaclass might be getting its table method from a different trait. In practice, you are unlikely to encounter this sort of problem.