私のコードでは、データベース ファイルをロードして、それらを数回使用しています。
コマンドラインを使用してPerlでオブジェクトを返し、それを別のコマンドで再利用する方法はありますか?
例えば:
perl -Mpckg -e '$v = pckg::foo();'
perl -Mpckg2 -e 'pckg2::foo(&v);'
これは機能しません。いくつかの理由があります。1 つは、2 番目の perl プロセスを開始すると、最初の perl プロセスがなくなっていることです。ちなみに、このように参照を使用することはできません。
いいえ、あるプロセスは別のプロセスのメモリにアクセスできません。特に、もう実行されていないプロセスは、その変数を安全に使用することはできません。
おそらく、最初のスクリプトのサーバーを作成しようとしているでしょう。終了するのではなく、実行を続けてコマンドを受け入れ (たとえば、親から STDIN を介して、または任意のプロセスからのソケットを介して) コマンドを解析し、最初に起動したときに構築したオブジェクトを使用して実行します。
それはできますが、オブジェクトを保持するために一時ファイルを使用する必要があります。
perl -MStorable -Mpckg -e '$v=pckg::foo(); Storable::store(\$v,file)'
オブジェクト $v がファイルに書き込まれた後、これを実行する必要があります。
perl -MStorable -Mpckg2 -e '$v = Storable::retrieve(file); unlink file; pckg2::foo($v)
したがって、定義したオブジェクトを pckg2::foo() 関数に渡すと、一時ファイルはその後削除されます。それで全部です。