1

まず第一に、私は Perl とその実践に慣れていません。

Perl アプリケーションをインストールするebuildを開発しようとしています。しかし、アプリケーションのライブラリファイルをどこに置くべきかわかりません。

アプリケーションのディレクトリ構造は

binary
share/app/*.pl
share/app/icons/*.png

binaryPerl 実行可能ファイルです。

バイナリでは、これらのような行がディレクトリrequire 'someLibrary.pl';内の Perl ライブラリを参照していることがわかります。また、私が推測する追加のライブラリの場所をバイナリに指示share/app/する行にも気付きました。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代わりに(両方とも FindBin によってエクスポートされた) を使用していた場合、実際のスクリプトに$Binシンボリック リンクを追加することができたはずです。/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 として自分で提案するパッチよりもはるかに邪魔になりません。

おそらく最初の選択肢をお勧めします。これは、ほとんどの場合に機能するはずであり、スクリプトとシステム自体の両方に関して、最も侵入的ではありません。

于 2012-09-27T09:25:06.040 に答える