[Bioperl-l] standardize shebang line in bioperl scripts
Mark Jensen
maj at fortinbras.us
Tue Sep 11 17:28:35 UTC 2018
+1 Steven
Sent from my iPhone
> On Sep 4, 2018, at 12:15 PM, Steven Lembark <lembark at wrkhors.com> wrote:
>
> On Wed, 29 Aug 2018 12:19:54 +0100
> Carnë Draug <carandraug+dev at gmail.com> wrote:
>
>> Hi
>>
>> I was wondering if there's any consensus about what should be used in
>> the shebang line. Looking at the existing scripts, I found:
>>
>> #!perl
>> #!/usr/bin/env perl
>> #!/usr/bin/perl
>> #!/usr/bin/perl -w
>>
>> Using the bioperl distzilla plugin bundle, 'perl' and '/usr/bin/perl'
>> get converted to the path of perl used for the package installation.
>> However, if '/usr/bin/env perl' it remains unmodified. This behaviour
>> seems to be a bug in MakeMaker [1].
>>
>> To me it makes sense to have the shebang line replaced with the perl
>> used for installation since that's the one that will have the rest of
>> bioperl modules. But the most important thing, I think, is to be
>> consistent.
>>
>> If no one opposes soon, I will change all of them to '/usr/bin/perl'
>> so that it gets fixed during install.
>
> /usr/bin/perl is the last thing you want to standardize on.
>
>
> POSIX did away with non-absolute path #! lines -- anything with #!perl
> is *old* and no longer works on most systems.
>
> #!/usr/bin/perl is largely unusable as it assumes you are using the
> O/S installed versin of perl, which you usually aren't (unless you
> want to use 5.8 on Centos or 5.10 on Redhat or 5.16 on Amazon linux).
> You normally want to use /opt/perl/bin/perl (linux, SysV),
> /usr/local/bin/perl (BSD), or ~/.perlbrew/whatever (just about
> anything).
>
> There is no good way other than $PATH to determine the preferred
> perl to use. For example, you might change your path when testing
> a new install to /opt/perl/5.26.1/bin/perl just to test that release
> before symlinking it all into /opt/bin.
>
> Net result: "env" is the only sane way to go.
>
> Luvly thing is that env might be installed in /bin/env or /usr/bin/env
> depending on Linux vs. BSD vs. SysV roots of whatever you are running
> Perl on (let alone Windows...).
>
> The one most likely to work is:
>
> #!/usr/bin/env perl
>
> linux habitually installs env into /bin with a symlink in /usr/bin;
> BSD & SysV install it in /usr/bin maybe-without a symlink in /bin.
>
> I any case using "/usr/bin/perl" either ties you to decade(s) out of
> date perl with the O/S distro or forces you to update the disro perl,
> which may break ancient pieces of the distro itself, and is nearly
> always the wrong thing to do.
>
> --
> Steven Lembark 3920 10th Ave South
> Workhorse Computing Birmingham, AL 35222
> lembark at wrkhors.com +1 888 359 3508
>
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at mailman.open-bio.org
> http://mailman.open-bio.org/mailman/listinfo/bioperl-l
More information about the Bioperl-l
mailing list