0

保存されたデータにアクセスできるようにする必要があるスクリプトを実行するアプリケーションがあります。main.pl配列を作成するスクリプト ( ) を実行したいと考えています。後でA.plまたはを実行する場合B.pl、これらのスクリプトが以前に作成した配列にアクセスし、その中の値を変更できるようにします。main.pl A.pl B.plそれを達成するには、何をコーディングする必要がありますか?

4

2 に答える 2

3

通常、1 つの perl インスタンスは別のインスタンスの変数にアクセスできません。問題は、「変数を共有するのとほとんど同じように何ができるか」ということになります。

1 つの方法は、データベースやディスク上の CSV ファイルなど、永続化できる場所にデータを保存することです。これは、プログラムの最初にデータを読み取り、それを書き込みまたは更新することを意味し、当然、競合状態、ロックなどに関する質問につながります...そして、考えられる回答がカバーする必要がある範囲を大幅に拡大します。

もう 1 つの方法は、CSV や YAML、または CPAN からライブラリで簡単に読み書きできるその他の形式を使用するようにプログラムを作成し、入出力に STDIN と STDOUT を使用することです。これにより、ストレージの分離が可能になり、シェル プロンプトからパイプを使用して複数のツールをチェーンすることもできます。

ハッシュを共有メモリに結び付けるインメモリ ソリューションについては、IPC::Shareable を確認してください。

http://metacpan.org/pod/IPC::Shareable

于 2013-06-25T09:55:55.690 に答える
1

Perl メモリ構造を保存して、後で他の Perl スクリプトからアクセスすることはできません。ただし、これらのメモリ構造をファイルとして書き出すことはできます。これは、ハード ロウ コーディングによって、またはさまざまな Perl モジュールを使用して行うことができます。Storableは標準のPerl モジュールであり、かなり前から存在しています。

インストールするのは配列だけなので、1 つのプログラムで配列をファイルに書き込み、別のファイルでその配列を読み取ることができます。

use strict;
use warnings;
use autodie;
use constant {
    ARRAY_FILE => "$Env{HOME}/perl_arry.txt",
};

my @array;
[...]    #Build the array
open my $output_fh, ">", ARRAY_FILE;
while my $item ( @array ) {
    say {$output_fh} $item;
}
close $output_fh;

次に、2 番目のプログラムにこの配列を読み込ませます。

use strict;
use warnings;
use autodie;
use constant {
    ARRAY_FILE => "$Env{HOME}/perl_arry.txt",
};

my @new_array;
open my $input_fh, "<", ARRAY_FILE;
while ( my $item = <$input_fh> ) {
    push @new_array, $item;
}
close $input_fh;

より複雑なデータは で保存できますがStorable、ほとんど同じことです: Storable を物理ファイルに書き込んでから、そのファイルを再度開いてデータをもう一度取り込む必要があります。

于 2013-06-25T16:11:30.643 に答える