Randy Stauner > App-rlibperl-0.700 > App::rbinperl

Download:
App-rlibperl-0.700.tar.gz

Dependencies

Annotate this POD

Website

View/Report Bugs
Module Version: 0.700   Source  

NAME ^

App::rbinperl - Execute perl using relative lib and assuming -S

VERSION ^

version 0.700

SYNOPSIS ^

Simplify cron jobs or other places where you specify commands to execute which don't have your full environment.

Instead of:

  * * * * * perl -I/home/username/perl5/lib/perl5 \
                   /home/username/perl5/bin/somescript

Do:

  * * * * * /home/username/perl5/bin/rbinperl somescript

This is even more useful in a shebang line which is often limited to a single argument...

This won't work on linux:

  #!/usr/local/bin/perl -I/home/username/perl5/lib/perl5 -S plackup

This will:

  #!/home/username/perl5/bin/rbinperl plackup

This example can be handy in a shared hosting environment where you install the modules you want using local::lib and then want to use plackup to run your app from apache as a CGI or FCGI script.

DESCRIPTION ^

The rbinperl script simplifies the execution of a perl script that depends on modules located in relative library directories.

This uses the same logic as App::rlibperl to prepend relative lib directories to @INC and additionally passes the -S argument to perl. This causes perl to search the $PATH (which now contains the directory where rbinperl was found) for the specified script.

EXAMPLE USAGE WITH local::lib ^

If you have installed App::MadeUpScript (and App::rbinperl) via local::lib your directory tree will look something like this:

  ${root}/bin/rbinperl
  ${root}/bin/made-up-script
  ${root}/lib/perl5/${modules}
  ${root}/lib/perl5/${archname}/${extras}
  ${root}/man/${docs}

When you're using a login shell with local::lib enabled you can just call made-up-script from the shell because your environment variables are configured such that ${root}/bin is in your $PATH and ${root}/lib/perl5 is in $PERL5LIB.

However to run from any sort of detached process the environment variables from local::lib won't be available, and you'd have to do this instead:

  $ perl -I${root}/lib/perl5 -S made-up-script

rbinperl simplifies this by adding the relative lib directories automatically and passing -S:

  $ ${root}/bin/rbinperl made-up-script

BLAH BLAH BLAH ^

Honestly the script itself is much simpler than explaining how it can be useful (if it even is useful).

USE CASE ^

SHARED HOSTING

One of the reasons for creating this dist was to make it as easy as possible to install a modern perl web framework into a shared hosting environment.

You can build a web application and use Plack to run it as fastcgi through Apache (a common shared hosting option).

For example you could put this in dispatch.fcgi:

  #!/usr/bin/env plack
  require 'mywebapp.pl';

and Apache would run your perl script through plack which would detect an FCGI environment and then load your web app.

If plack and your web framework are installed into a local lib this won't work. Instead you can do this:

  #!/home/username/perl5/bin/rbinperl plackup
  require 'mywebapp.pl';

It's almost as easy, and makes the rest (loading your local lib) transparent.

BUGS AND LIMITATIONS ^

Unfortunately the shebang described above isn't entirely portable.

If you are on an operating system that doesn't allow using another script (as opposed to a binary) in the shebang, you may be able to use a work around like this instead:

  #!/bin/sh
  eval 'exec perl /home/username/perl5/bin/rbinperl plackup $0 ${1+"$@"}'
    if 0;
  require 'mywebapp.pl';

It's a slight variation of a common perl/shebang idiom.

See "BUGS AND LIMITATIONS" in App::rlibperl for more.

SEE ALSO ^

AUTHOR ^

Randy Stauner <rwstauner@cpan.org>

COPYRIGHT AND LICENSE ^

This software is copyright (c) 2011 by Randy Stauner.

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

syntax highlighting: