ヘルプが必要です:perl 5.8.8のコアモジュールのみを使用してリモートサーバーからファイルをフェッチする方法はありますか?File::Fetchは5.9からのみコアモジュールになりました。
3 に答える
これはしょっちゅう出てきます。はい、古典を見てください。 CPAN を使用することもできます。Perl スクリプトを作成して実行できる場合は、モジュールをローカル ディレクトリに配置して使用することもできます。コア モジュールのみを使用するという要件は、まったく人為的なものです。
あなたの場合、LWP::Simple
のgetstore()
関数はあなたが望むことをします。技術的にはコアでLWP::Simple
はありませんが、デフォルトで多くの Perl ディストリビューションに含まれています。あなたはすでにそれを持っているかもしれません。
更新:では、これを 1000 台のサーバーで実行しますか? 各サーバーにモジュールを手動でインストールする必要はありません。 CPAN をプログラムで使用して、必要なモジュールをダウンロードしてインストールします (CPAN をルート モジュール ライブラリではなくローカルにインストールするには、微調整が必要です)。モジュールをファットパックするという Leon Timmermans の提案も別のオプションです。
この方法で本当にやりたくない場合は、基本的に答えはノーです。適切なモジュールもシステム コマンドも使用せずに HTTP 経由でリモート ファイルをフェッチする簡単な方法はありません (私はあなたの独自の HTTP クライアントを単純な方法にする必要がありますが、それが機能する場合は問題ありません)。
私が見る唯一の他の潜在的な解決策は、次のような問題に対する別のアプローチです。
- 1 つの場所でスクリプトを使用してファイルを取得し、FTP 経由で 1000 台のサーバーすべてに配布します。
- または、ファイルを FTP サーバーに配置し、各サーバーで単純な Perl スクリプトを使用して FTP 経由で取得します。
ダンがすでに言ったように、はい、あなたもCPANを使うことができます。彼のリンクで言及されていないアプローチの1つは、通常のCPANを使用するディストリビューションとして記述し、ファットパックすることです。Fatpackerは、スクリプトとそのすべての(pure-perl)依存関係を組み合わせて、配布が簡単な単一のファイルを作成します。
あなたが使用することができます:
my $wgetoutput = `wget "$myFileToGet"`;
バッククォート (`) 内のものはデフォルト シェルに与えられるので、そこで必要な (そして許可されている) ものを呼び出すことができます。警告: $myFileToGet には "&& rm -rf *" のようなものが含まれている可能性があるため、サニタイズを忘れないでください。