Aion

 view release on metacpan or  search on metacpan

lib/Aion/Meta/Subroutine.pm  view on Meta::CPAN

			$fail = 1, last unless $type eq $other_type;
		}
	} else {
		$fail = 1;
	}

	die "Signature mismatch: ${\$self->stringify} <=> ${\$subroutine->stringify}" if $fail;
}

sub stringify {
	my ($self) = @_;

	my ($pkg, $subname) = @$self{qw/pkg subname/};
	my $signature = join " => ", @{$self->signature};
	return "$subname($signature) of $pkg";
}

1;

__END__

=encoding utf-8

=head1 NAME

Aion::Meta::Subroutine - describes a function with a signature

=head1 SYNOPSIS

	use Aion::Types qw(Int);
	use Aion::Meta::Subroutine;
	
	my $subroutine = Aion::Meta::Subroutine->new(
		pkg => 'My::Package',
		subname => 'my_subroutine',
		signature => [Int, Int],
		referent => undef,
	);
	
	$subroutine->stringify  # => my_subroutine(Int => Int) of My::Package

=head1 DESCRIPTION

Used to declare the required function in interfaces and abstract classes.
In this case, C<referent ~~ Undef>.

It also creates a wrapper function that checks the signature.

=head1 SUBROUTINES

=head2 new (%args)

Constructor.

=head2 wrap_sub ()

Creates a wrapper function that checks the signature.

=head2 compare ($subroutine)

Checks its (expected) signature against the one declared by the function in the module and throws an exception if the signatures do not match.

=head2 stringify ()

String description of the function.

=head2 pkg ()

Returns the name of the package in which the function is declared.

=head2 subname ()

Returns the name of the function.

=head2 signature ()

Returns the function signature.

=head2 referent ()

Returns a reference to the original function.

=head2 wrapsub ()

Returns a wrapper function that checks the signature.

=head1 AUTHOR

Yaroslav O. Kosmina L<mailto:dart@cpan.org>

=head1 LICENSE

âš– B<GPLv3>

=head1 COPYRIGHT

The Aion::Meta::Subroutine module is copyright © 2025 Yaroslav O. Kosmina. Rusland. All rights reserved.



( run in 0.824 second using v1.01-cache-2.11-cpan-f56aa216473 )