Class::Virtual(3pm)
π Class::Virtual π
ok so bestie, welcome to Class::Virtual β the base class for virtual base classes, from the Perl User Contributed Documentation era. it's giving "vintage but make it abstract" β¨ (iykyk). it lives in the 3pm manual section and honestly? it's a whole vibe. let's get into it π
πΈ SYNOPSIS πΈ
ok so here's the whole thing in action, no notes:
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);
# Check to make sure My::Private::Idaho implemented everything
my @missing = __PACKAGE__->missing_methods;
die __PACKAGE__ . ' forgot to implement ' . join ', ', @missing
if @missing;
# If My::Private::Idaho forgot to implement new(), the program will
# halt and yell about that.
my $idaho = My::Private::Idaho->new;
# See what methods we're obligated to implement.
my @must_implement = __PACKAGE__->virtual_methods;
like. the drama of it. My::Private::Idaho literally cannot exist unless it does its homework π periodt.
β¨ DESCRIPTION β¨
π¨ THIS MODULE IS DISCOURAGED! Avoid using it for new code. There's nothing wrong with it, but there are better ways to accomplish the same thing. Look into the Moose ecosystem.
ok so real talk: it's not bad, it's justβ¦ there's better out there, bestie. Moose girlies stay winning π¦. but if you're here, here's the tea:
This is a base class for implementing virtual base classes (what some people call an abstract class). Kinda kooky π. It allows you to explicitly declare what methods are virtual and that must be implemented by subclasses. This might seem silly, since your program will halt and catch fire when an unimplemented virtual method is hit anyway, but there's some benefits π .
- The error message is more informative π₯. Instead of the usual "Can't locate object method" error, you'll get one explaining that a virtual method was left unimplemented.
- Subclass authors can explicitly check to make sure they've implemented all the necessary virtual methods. When used as part of a regression test, it will shield against the virtual method requirements changing out from under the subclass π‘οΈβ¨.
- Finally, subclass authors can get an explicit list of everything they're expected to implement π.
Doesn't hurt and it doesn't slow you down. iconic behaviour, honestly β.
π§ Methods π§
π virtual_methods
Virtual::Class->virtual_methods(@virtual_methods);
my @must_implement = Sub::Class->virtual_methods;
This is an accessor to the list of virtual_methods. Virtual base classes will declare their list of virtual methods. Subclasses will look at them. Once the virtual methods are set they cannot be undone π β no take-backs, no "wait actuallyβ", the list is locked in, bestie.
π missing_methods
my @missing_methods = Sub::Class->missing_methods;
Returns a list of methods Sub::Class has not yet implemented. it's the vibe check for your subclass β
.
π CAVEATS and BUGS π
Autoloaded methods are currently not recognized. I have no idea how to solve this. π (not me crying in autoload, fr fr)
π AUTHOR π
Michael G Schwern <schwern@pobox.com> β the icon, the moment, the legend π«Ά
β LEGAL β
Copyright 2000-2015 Michael G Schwern
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See <http://dev.perl.org/licenses/>
π SEE ALSO π
Class::Virtually::Abstractβ the cousin, the sibling, the also-see π
and that's the whole page, bestie! π this lil time capsule shipped as perl v5.34.0, dated 2022-06-12, and it's still out here being the User Contributed Perl Documentation moment it always was. slay, stay abstract, and don't forget to implement your virtual methods or the program WILL yell at you π₯ππΈ
π¦ where this page comes from
- debian bookworm: libclass-virtual-perl 0.08-3 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- debian trixie: libclass-virtual-perl 0.08-3 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu noble: libclass-virtual-perl 0.08-3 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu resolute: libclass-virtual-perl 0.08-3 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu stonking: libclass-virtual-perl 0.08-3 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms