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 <jkerwin2...@gmail.com> 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
>

Reply via email to