Class::Virtual(3pm)

πŸ“¦
version 0.08 Β· 4 versions
, in debian bookworm, debian trixie, ubuntu noble, ubuntu resolute, ubuntu stonking

πŸ’– 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 🫢


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