MakeMe...iversal(3pm)

πŸ“¦
version 1.01 Β· 5 versions
, in ubuntu noble, ubuntu resolute, ubuntu stonking

πŸ’– NAME πŸ’–

okay bestie, this is the MakeMe...iversal(3pm) page for Class::MakeMethods::Composite::Universal β€” aka Composite Method Tricks. It's part of the User Contributed Perl Documentation, and it's here to hand you some composite method magic ✨

✨ SYNOPSIS ✨

Class::MakeMethods::Composite::Universal->make_patch(
  -TargetClass => 'SomeClass::OverYonder',
  name => 'foo',
  pre_rules => [
    sub {
      my $method = pop;
      warn "Arguments for foo:", @_
    }
  ]
  post_rules => [
    sub {
      warn "Result of foo:", Class::MakeMethods::Composite->CurrentResults
    }
  ]
);

πŸ¦‹ DESCRIPTION πŸ¦‹

The Composite::Universal subclass of MakeMethods gives you some generally-applicable types of methods based on Class::MakeMethods::Composite. It's giving "reusable composite method tricks" and honestly? iconic πŸ’…

πŸ‘‘ METHOD GENERATOR TYPES πŸ‘‘

πŸŽ€ patch πŸŽ€

The patch ruleset generates composites whose core behavior is based on an existing subroutine. So yeah, it wraps around something already there and makes it do a little extra πŸ’–

Here's a sample usage:

sub foo {
  my $count = shift;
  return 'foo' x $count;
}

Class::MakeMethods::Composite::Universal->make(
  -ForceInstall => 1,
  patch => {
    name => 'foo',
    pre_rules => [
      sub {
        my $method = pop @_;
        if ( ! scalar @_ ) {
          @{ $method->{args} } = ( 2 );
        }
      },
      sub {
        my $method = pop @_;
        my $count = shift;
        if ( $count > 99 ) {
          Carp::confess "Won't foo '$count' -- that's too many!"
        }
      },
    ],
    post_rules => [
      sub {
        my $method = pop @_;
        if ( ref $method->{result} eq 'SCALAR' ) {
          ${ $method->{result} } =~ s/oof/oozle-f/g;
        } elsif ( ref $method->{result} eq 'ARRAY' ) {
          map { s/oof/oozle-f/g } @{ $method->{result} };
        }
      }
    ],
  },
);

🌸 make_patch 🌸

A convenient wrapper for make() and the patch method generator. It's literally the shortcut bestie 🫢

It provides the -ForceInstall flag, which is required to ensure that the patched subroutine replaces the original.

bestie, this flag is not optional vibes β€” -ForceInstall is required here so the patched subroutine actually replaces the original. no cap πŸ’€

For example, one could add logging to an existing method as follows:

Class::MakeMethods::Composite::Universal->make_patch(
  -TargetClass => 'SomeClass::OverYonder',
  name => 'foo',
  pre_rules => [
    sub {
      my $method = pop;
      warn "Arguments for foo:", @_
    }
  ]
  post_rules => [
    sub {
      warn "Result of foo:", Class::MakeMethods::Composite->CurrentResults
    }
  ]
);

🌈 SEE ALSO 🌈

  • See Class::MakeMethods for general information about this distribution. ✨
  • See Class::MakeMethods::Composite for more about this family of subclasses. πŸ¦‹

mwah πŸ’‹ β€” this page comes from perl v5.36.0, dated 2022-10-13, and its manual name is MakeMe...iversal(3pm). slay, bye πŸ‘‘πŸŽ€

πŸ“¦ where this page comes from