1

首先,我不熟悉 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/.

问题:我必须为这些文件创建一个补丁。这似乎不是一个好的/正常的方式。

当然,其他解决方案也非常受欢迎。

更新:我已经尝试过解决方案#2,并且正如我所怀疑的那样,当我执行/usr/bin/binary库路径时,会变成/usr/bin/share/app. 这当然会导致找不到库。

4

1 回答 1

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。要么只是一个简单的搜索-n-替换,要么只是一个最小的补丁替换

use Findbin qw($Bin)

our $Bin;
use FindBin qw($RealBin);
BEGIN { $Bin = $RealBin; }

这两个补丁的侵入性都比您建议自己作为解决方案 3 的补丁小得多。

我可能会推荐第一种选择。这应该在大多数情况下都有效,并且对于脚本和系统本身的侵入性最小。

于 2012-09-27T09:25:06.040 回答