2009-07-22 8 views
5

私は、相当量のテキスト処理を必要とする契約の入札依頼に答える過程にあります。主な問題は、顧客がUNIX(HPUX、Solaris、AIX、FreeBSD)またはLinux(SLES、RHEL)プラットフォームでこれを実行できるようにすることです。彼らは余分なツールのインストールを前提条件にしたくありません。PerlがデフォルトでインストールされていないUnixプラットフォームがありますか?

私はPerlとawkの間で引き裂かれています。私はPerlがテキストを処理する理想的なツールであることを知っていますが(私はそれにはかなり熟練しています)、RFTの応答にPerlが必要となる前に、誰かがプラットフォーム上で動いているかどうかを調べたいと思いますPerlはデフォルトではインストールされません。

これらのプラットフォームをRFTにリストし、クライアントにどのような方法で行きたいかを選択させると便利です。私は、デフォルトのインストールではFreeBSD上にないという曖昧な思い出を持っています。また、Linux以外のプラットフォームにもそれがないということもあります。

他のツールも提案できますが、私がPerlとawkに精通していることを考えると、それらはおそらく候補リストの唯一のものです。

答えて

13

UNIX版のPerl用にコンパイルされたPerlを入手できます。 Perlは「インストール」する必要はありませんが、アプリケーションのディレクトリ内で実行できます。 Perlを私のディストリビューションにバンドルするので、同じバージョンを確実に実行できるようになります。

ターゲットOSでのテストをせずに、完全にクロスプラットフォームのシェルスクリプトを作成することは非常に困難です。 awkスクリプトを開発する場合は、おそらくPOSIX awkのスーパーセットであるLinux上のGNU変種を使用して開発する予定です。私はしばしばオープニングソースpackages on Solarisを設定しています。私は絶えず人々があなたのツールの現代版の実行を想定している問題を見つけています。たとえば、Solarisではbashは標準のbourneシェル(/ bin/sh)ではなく、echoはパラメータをとらない。 POSIX awkを使ってコードを作成しようとすると、正規表現ライブラリによって制限されているか、または日付が定められていない慣習に縛られることになります。

Perl's artistic licens eは、著作権を保つような簡単なことをいくつか実行する限り、プログラムとバンドルすることができます。

+0

実際には、複数のパッケージ(または実行時に選択されたたくさんのperlサブディレクトリが1つのパッケージ、プラットフォームごとに1つ)を出荷する必要がありますが、バージョン管理も可能なので、これは良いアイデアです(サブディレクトリにバンドルする)。私はライセンスをチェックアウトします。 +1。 – paxdiablo

3

ほぼすべての* nix(非常に限られたディスク容量のものを除く)のほとんどは、Perlがインストールされています。 AFAIK、さらにはFreeBSD。ただそうでない場合には、PerlプログラムをPAR::Packerのperlを必要としない実行可能ファイルに変換することができます。

+1

Why * even * FreeBSD? –

+0

@Sinan、私は彼らが標準として出荷していないという曖昧な考えを持っていたので、 "BSD"と推測しています。 – paxdiablo

+2

@Pax Duh!彼の反応は理にかなっている。私はバージョン5以降、FreeBSDを使用していて、デフォルトでPerlがインストールされていました。システムPerlはポートPerlよりも古い傾向がありましたが、Perlがデフォルトになるようにrootを選択できるシェルスクリプトがあります。 –

2

ほとんどすべての* nixプラットフォームにPerlがインストールされていても、同じバージョンではない可能性があるので注意してください。大部分の* nixで動作する必要があるという要件で、シェル+ユーティリティでコーディングできます。ファイルを解析するために、awk +シェルも同様に仕事をすることができます。それを「ポータブル」形式で書くだけです。クライアントが自分のマシン上でPerlを持っていない場合は、常にそのプラットフォームのための実行可能ファイルを作成するためにPar::Packerを使用することができます

+1

Perlの目標の1つ(他の多くの言語とは異なり)は、リリース間で非常に互換性があるため、最低限のバージョン用に書くだけで済みます。 –

+1

これはPerl 5.6だろうと思います。 – innaM

+2

5.004を超える良いPerlポートを持たないプラットフォーム(非常に奇妙)がいくつかありますが、一般的には5.6が良いターゲットです。 – ephemient

4

詳細はthisをチェックしてください。これはまた、実行可能ファイルにも含まれるため、モジュールの使用について心配する必要がないことを意味します。

+0

モジュールが特に許可されていないライセンスを使用している場合は警告してくださいAGPLまたは何か。実際に使用するモジュールのソースコードを実際に配布する必要があります。難しいことではありませんが、痛みを伴うこともあります。 – Weegee

+0

ええと、私は、あなたが実行可能ファイルからソースを回復することができると主張します。あなたがそれを変更しない限り、CPANはソースを利用可能にするとみなすべきです。 –

+0

@Weegee、Par :: Packerはファイルを圧縮するだけなので、任意のコードを抽出するのは簡単です。 LGPLは、修正されたコードで新しい実行ファイルを作成することをユーザーが可能にする必要がありますが、これは問題になります。それに対処する最も簡単な方法は、関係するライブラリを別のparファイルに含めることです。メインファイルでセカンダリファイルを読み込むことができます。 – daotoad

2

あなたが言及しているオペレーティングシステムのすべてのバージョンがPerlをインストールしているとは思いますが、当然のことながら古いバージョンはありません。また、awkのようなツールでさえも非常に古いUN * Xバージョンには日常的にはインストールされていなかったことに注意してください。

ボトムライン:もしあなたのアプリが本当にPerlを必要とするなら、あなたはそれをチェックしなければなりませんBourneシェルスクリプトを介してインストールされています - もしtheatが動かなければあなたは実際にはねついています)、それをインストールするための何らかの方法はありません。

0

市販のUnixは、非常に古いバージョンのPerlにバンドルされがちです。

関連する問題