This file is indexed.

/usr/share/perl5/Aspect/Point/Functions.pm is in libaspect-perl 1.04-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
package Aspect::Point::Functions;

=pod

=head1 NAME

Aspect::Point::Functions - Allow point context methods to be called as functions

=head1 SYNOPSIS

  use Aspect::Point::Functions;
  
  # This code is equivalent to the SYNOPSIS for Aspect::Point
  my $advice_code = sub {
      print type;           # The advice type ('before')
      print pointcut;       # The matching pointcut ($pointcut)
      print enclosing;      # Access cflow pointcut advice context
      print sub_name;       # The full package_name::sub_name
      print package_name;   # The package name ('Person')
      print short_name;     # The sub name (a get or set method)
      print self;           # 1st parameter to the matching sub
      print (args)[1];      # 2nd parameter to the matching sub
      original->( x => 3 ); # Call matched sub independently
      return_value(4)       # Set the return value
  };

=head1 DESCRIPTION

In the AspectJ toolkit for Java which L<Aspect> is inspired by, the join point
context information is retrieved through certain keywords.

In L<Aspect> this initially proved too difficult to achieve without heavy
source code rewriting, and so an alternative approach was taken using a topic
object and methods.

This B<experimental> package attempts to implement the original function/keyword
style of call.

It is considered unsupported at this time.

=cut

use strict;
use Exporter      ();
use Aspect::Point ();

our $VERSION = '1.04';
our @ISA     = 'Exporter';
our @EXPORT  = qw{
	type
	pointcut
	original
	sub_name
	package_name
	short_name
	self
	wantarray
	args
	exception
	return_value
	enclosing
	topic
	proceed
};

sub type () {
	$_->{type};
}

sub pointcut () {
	$_->{pointcut};
}

sub original () {
	$_->{original};
}

sub sub_name () {
	$_->{sub_name};
}

sub package_name () {
	my $name = $_->{sub_name};
	return '' unless $name =~ /::/;
	$name =~ s/::[^:]+$//;
	return $name;
}

sub short_name () {
	my $name = $_->{sub_name};
	return $name unless $name =~ /::/;
	$name =~ /::([^:]+)$/;
	return $1;
}

sub self () {
	$_->{args}->[0];
}

sub wantarray () {
	$_->{wantarray};
}

sub args {
	if ( defined CORE::wantarray ) {
		return @{$_->{args}};
	} else {
		@{$_->{args}} = @_;
	}
}

sub exception (;$) {
	unless ( $_->{type} eq 'after' ) {
		Carp::croak("Cannot call exception in $_->{exception} advice");
	}
	return $_->{exception} if defined CORE::wantarray();
	$_->{exception} = $_[0];
}

sub return_value (;@) {
	# Handle usage in getter form
	if ( defined CORE::wantarray() ) {
		# Let the inherent magic of Perl do the work between the
		# list and scalar context calls to return_value
		return @{$_->{return_value} || []} if $_->{wantarray};
		return $_->{return_value} if defined $_->{wantarray};
		return;
	}

	# We've been provided a return value
	$_->{exception}    = '';
	$_->{return_value} = $_->{wantarray} ? [ @_ ] : pop;
}

sub enclosing () {
	$_[0]->{enclosing};
}

sub topic () {
	Carp::croak("The join point method topic in reserved");
}

sub proceed () {
	my $self = $_;

	unless ( $self->{type} eq 'around' ) {
		Carp::croak("Cannot call proceed in $self->{type} advice");
	}

	local $_ = ${$self->{topic}};

	if ( $self->{wantarray} ) {
		$self->return_value(
			Sub::Uplevel::uplevel(
				2,
				$self->{original},
				@{$self->{args}},
			)
		);

	} elsif ( defined $self->{wantarray} ) {
		$self->return_value(
			scalar Sub::Uplevel::uplevel(
				2,
				$self->{original},
				@{$self->{args}},
			)
		);

	} else {
		Sub::Uplevel::uplevel(
			2,
			$self->{original},
			@{$self->{args}},
		);
	}

	${$self->{topic}} = $_;

	return;
}

1;

=pod

=head1 AUTHORS

Adam Kennedy E<lt>adamk@cpan.orgE<gt>

=head1 COPYRIGHT

Copyright 2011 Adam Kennedy.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut