Perl: Difference between revisions

From NixOS Wiki
imported>Raboof
document caveats running a perl script
imported>NieDzejkob
describe wrapping PERL5LIB
Line 12: Line 12:
* After reviewing the result from the previous step and making appropriate modifications, add it to <code>pkgs/top-level/perl-packages.nix</code>.  Note that some things use <code>buildPerlPackage</code> while some use <code>buildPerlModule</code>.  Also note the mostly-followed naming convention as well as the mostly-followed alphabetical ordering. There are plenty of examples in <tt>perl-packages.nix</tt> &mdash; use the source, Luke!
* After reviewing the result from the previous step and making appropriate modifications, add it to <code>pkgs/top-level/perl-packages.nix</code>.  Note that some things use <code>buildPerlPackage</code> while some use <code>buildPerlModule</code>.  Also note the mostly-followed naming convention as well as the mostly-followed alphabetical ordering. There are plenty of examples in <tt>perl-packages.nix</tt> &mdash; use the source, Luke!
* Build and test.
* Build and test.
==Wrappers for installed programs==
To make perl modules available to a program in your derivation:
* add <code>makeWrapper</code> to <code>buildInputs</code>
* run <code>wrapProgram $pathToScript --set PERL5LIB ${perlPackages.makeFullPerlPath [ perlPackages.Whatever ]}</code> in <code>postInstall</code>


[[Category:Languages]]
[[Category:Languages]]

Revision as of 15:23, 27 January 2021

Running a Perl script

Common problems and solutions:

Can't locate DB_File.pm in @INC (you may need to install the DB_File module): run it with nix-shell -p perl -p perlPackages.DBFile --run ./myscript.pl

./myscript.pl: bad interpreter: /usr/bin/perl: no such file or directory: change the first line of the script to #!/usr/bin/env -S perl or start it with perl ./myscript.pl

Adding something from CPAN to nixpkgs

  • Use the nix-generate-from-cpan.pl script (see nixpkgs/maintainers/scripts/) to generate something appropriate.
    Example usage: nix-generate-from-cpan.pl Devel::REPL
  • After reviewing the result from the previous step and making appropriate modifications, add it to pkgs/top-level/perl-packages.nix. Note that some things use buildPerlPackage while some use buildPerlModule. Also note the mostly-followed naming convention as well as the mostly-followed alphabetical ordering. There are plenty of examples in perl-packages.nix — use the source, Luke!
  • Build and test.

Wrappers for installed programs

To make perl modules available to a program in your derivation:

  • add makeWrapper to buildInputs
  • run wrapProgram $pathToScript --set PERL5LIB ${perlPackages.makeFullPerlPath [ perlPackages.Whatever ]} in postInstall