All of this is supposition since I can't see anything you haven't shown us.
It sounds like this code is part of a larger program that is going to call
do "EPrints";
which will bring the source of EPrints into the larger program. The $c
variable is probably setup there. What the code in EPrints is doing is
setting up a handler named can_request_view_document. At some point in the
larger program, it is going to say something like
my $document = $r->param(doc);
my $can_request = $c->{can_request_view_document}->($document, $r);
return 403, "You are not allowed to access $document" unless $can_request;
return 400, "$document doesn't exist" unless -f $document;
return 200, $document;
On Fri, Jul 20, 2018 at 11:06 AM James Kerwin <[email protected]> wrote:
> Afternoon all,
>
> I have been asked to take a look at a .pl file which is part of a set-up
> called "EPrints". The particular file controls who can access documents on
> a server.
>
> Excluding some comments, the file starts like:
>
> $c->{can_request_view_document} = sub
> {
> my( $doc, $r ) = @_;
>
> It then goes on to complete the subroutine and return a value.
>
> I understand that $doc and $r are populated via @_ but I have never before
> seen the structure of the first line starting with "$c". Additionally, the
> file doesn't look like a typical Perl file (eg.#!/usr/bin/perl -w at the
> top and some use statements).
>
> I know it's very vague, but could anybody explain this syntax to me? My
> suspicion is that something else is calling the subroutines in this file?
> Am I at least on the right track?
>
> Thanks,
> James
>