4

いくつかのサーバーに展開するための小さな perl アプリケーションを作成しました。これは、いくつかのスクリプト、いくつかのモジュール、およびいくつかのデータ ファイルで構成されています。複数のユーザーが使用します。アプリ モジュールを site_perl ディレクトリに移動するのではなく、これらすべてのファイルを 1 つのディレクトリにまとめたいと思います。

たとえば、アプリケーションが jump.pl swim.pl Common.pm と messages.txt で構成されているとします。

アプリケーション (jump.pl または swim.pl のいずれか) は、別のディレクトリから呼び出されます。アプリケーションのインストール場所が $PATH にない可能性があるため、ユーザー (または別のアプリ) がのような絶対パス名/some/path/swim.plまたは のような相対パス名でアプリケーションを呼び出す可能性があります。../path/swim.pl

アプリケーションをできるだけシンプルに再配置したいのですが、これは、アプリケーションへのパスをできるだけ少ない場所に配置することを意味します。

現時点で swim.pl と jump.pl はこのように開始します

#!/usr/bin/perl
use strict;
use warnings;
use lib '/some/path';
use Common;
#
my $basedir = '/some/path';
...
open my $fh, '<', "$basedir/messages.txt" or die ... ;

そのため/some/path、いくつかのスクリプトとモジュールのいくつかの場所にあります。

保管する場所の数を最小限に抑えるための可能な手段として、次のことを検討しました/some/path

  • 環境変数PERL5LIB=/some/pathを設定して行う open my $fh, '<', "$ENV{PERL5LIB}/messages.txt"
  • シバン行を#!/usr/bin/perl -I/some/path- に設定しますが、messages.txt を見つけるにはどうすればよいでしょうか?
  • for in ?use Cwd qw(abs_path); の使い方を見つけてみてください。basename abs_path($0)use libBEGIN

設置場所の柔軟性を最大化し、すべてをまとめ、設置場所の複数のハードコーディングを最小限に抑えるための提案はありますか?

4

1 に答える 1

4

ビンの検索:

use FindBin qw( $Bin );
use File::Spec::Functions qw( catfile updir );
use lib catfile( updir($Bin), 'lib');
于 2010-10-15T15:13:08.043 に答える