首先,我不熟悉Perl及其实践。
我正在尝试开发一个安装Perl应用程序的ebuild。但是我不知道将应用程序的库文件放在何处。
应用程序的目录结构是
binary
share/app/*.pl
share/app/icons/*.png
binary
是Perl可执行文件。
在二进制文件中,我看到像require 'someLibrary.pl';
这样的行,它们引用share/app/
目录中的Perl库。我还注意到一条use lib "$BIN/share/app";
行,告诉二进制文件我想在哪里找到其他库。
现在我遇到了如何安装应用程序的问题。
解决方案#1:在/usr/bin/
中安装二进制文件,在/usr/lib/perl5/
中安装库。
问题:在哪里放图标?使用$Bin/share/app/icons/*.png
在二进制文件和库中引用图标。我猜这不起作用。
解决方案#2:在/usr/share/app/
安装所有内容。
问题:二进制文件放在哪里?在/usr/bin/
中创建符号链接到二进制文件?
解决方案#3:修补Perl文件,以便他们在/usr/share/app/icons
中查找图标,将二进制文件放在/usr/bin/
中,将库放在/usr/lib/perl5/
中。< / p>
问题:我必须为文件创建补丁。这似乎不是一种好的/正常的方式。
当然,其他解决方案非常受欢迎。
更新:我已经尝试过解决方案#2,正如我怀疑的那样,当我执行/usr/bin/binary
时,库路径变为/usr/bin/share/app
。这当然会导致找不到库。
答案 0 :(得分:0)
给定代码使用FindBin来定位应用程序数据目录。这使得解决方案2可以使用/usr/share/app/script.pl
中的脚本。
如果脚本使用的是$RealBin
而不是$Bin
(由FindBin导出),您只需在/usr/bin
中添加符号链接到真实脚本即可。但是注意到这对当前脚本不起作用。
备选方案1是编写一个小包装器并将其放在/ usr / bin中。这样的事情似乎对我有用:
#!/bin/sh
exec /usr/share/app/script.pl "$@"
备选方案2是修补脚本以使用$ RealBin。要么只是简单的搜索替换,要么只是替换
的最小补丁use Findbin qw($Bin)
与
our $Bin;
use FindBin qw($RealBin);
BEGIN { $Bin = $RealBin; }
这两个补丁对你自己提出的解决方案3的修补程序要少得多。
我可能会推荐第一种选择。这个shoudl在大多数情况下工作,并且对于脚本和系统都是最不具侵入性的。