# man > Class::Virtual

---
type: CommandReference
command: Class::Virtual
mode: perldoc
section: 3pm
source: perldoc
---

## Quick Reference

- `__PACKAGE__->virtual_methods(qw(method1 method2 ...))` — Declare virtual methods in a base class
- `my @missing = __PACKAGE__->missing_methods` — Get list of unimplemented virtual methods
- `my @must_implement = __PACKAGE__->virtual_methods` — List all virtual methods a subclass must implement
- `__PACKAGE__->new()` — Instantiate subclass; dies if any virtual method unimplemented

## Name

Class::Virtual - Base class for virtual base classes (abstract classes).

## Synopsis

perl
package My::Virtual::Idaho;
use base qw(Class::Virtual);
__PACKAGE__->virtual_methods(qw(new foo bar this that));

package My::Private::Idaho;
use base qw(My::Virtual::Idaho);
my @missing = __PACKAGE__->missing_methods;
die __PACKAGE__ . ' forgot to implement ' . join ', ', @missing if @missing;
my $idaho = My::Private::Idaho->new;
my @must_implement = __PACKAGE__->virtual_methods;
## Description

This module implements virtual base classes (abstract classes). It allows explicit declaration of methods that must be implemented by subclasses. Benefits: more informative error messages, ability to check for missing methods (useful in regression tests), and explicit listing of required methods. **Discouraged for new code** — consider Moose.

## Methods

- `virtual_methods(@list)` — Accessor to the list of virtual methods. Base class declares them; subclasses read them. Once set, cannot be undone.
- `missing_methods()` — Returns list of methods the subclass has not yet implemented.

## Caveats

Autoloaded methods are not recognized (no known solution).

## Examples

The Synopsis above demonstrates declaration, missing method checking, instantiation, and listing required methods. Use `missing_methods` in a subclass to ensure completeness before runtime.

## See Also

- [Class::Virtually::Abstract](http://localhost/phpMan.php/perldoc/Class%3A%3AVirtually%3A%3AAbstract/markdown)