Functional-Utility

 view release on metacpan or  search on metacpan

t/lib/Test/Resub.pm  view on Meta::CPAN

use strict;
use warnings;

use base qw(Exporter);
our @EXPORT = qw(resub bulk_resub);

our $VERSION = 2.02;

use Carp qw(croak);
use Storable qw(dclone);
use Scalar::Util qw(weaken);

sub default_replacement_sub { sub {} }
sub set_prototype(&$) {
	if (_implements('Scalar::Util','set_prototype')) {
		goto \&Scalar::Util::set_prototype;
	} else {
		my $code = shift;
		my $proto = shift;
		$proto = defined $proto ? "($proto)" : '';
		local $@;

t/lib/Test/Resub.pm  view on Meta::CPAN

		target_package => $package,
		target_sub => $sub,
		orig_code => $orig_code,
		called => 0,
		args => [],
		autovivified => $autovivified,
		stashed_variables => _save_variables($args{name}),
		deep_copy => $args{deep_copy},
	}, $class;

	weaken(my $weak_self = $self);
	my $wrapper_for_code = set_prototype(sub {
		$weak_self->{called}++;
		$weak_self->{was_called} = 1;
		push @{$weak_self->{args}}, ($weak_self->{deep_copy}
			? do {
				local $Storable::Deparse = 1;
				local $Storable::Eval = 1;
				dclone(\@_);
			}
			: [@_]);



( run in 0.514 second using v1.01-cache-2.11-cpan-65fba6d93b7 )