2013-02-15 65 views
0

在我的代碼中,我加載數據庫文件,然後多次使用它們。命令行中的Perl返回對象

有沒有辦法在Perl中使用命令行返回對象,然後在另一個命令中重用它?

例如:

perl -Mpckg -e '$v = pckg::foo();' 
perl -Mpckg2 -e 'pckg2::foo(&v);' 

回答

1

你可以做到這一點,但你必須使用臨時文件保存對象。

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的()函數之後你的臨時文件將被刪除。就這樣。

+0

我試過了您的代碼從pckg :: foo()返回一個字符串,但這就是我得到的SCALAR(0x89b5f10)。我如何獲得對象的價值? – user1615551 2013-02-16 00:47:45

+0

我不明白什麼'對象的價值'的意思,但我想你必須嘗試使用​​'pckg2 :: foo($$ v)' – edem 2013-02-16 00:57:59

+0

是的我的意思是字符串的值不是引用。謝謝你的工作。 – user1615551 2013-02-16 01:02:52

3

這可不行。有幾個原因。一個是,當你開始第二個進程時,你的第一個perl進程就不存在了。順便說一下,你不能以這種方式使用引用。

+0

有沒有辦法解決這個問題?我從Java調用perl命令,這就是爲什麼我使用系統調用 – user1615551 2013-02-15 23:41:48

+0

不。我認爲你不能這樣做。 – smartmeta 2013-02-15 23:44:22

+0

但是你在做什麼?你在Java中做什麼,在Perl中做什麼?爲什麼?也許我們會爲您的問題找到其他解決方案。 – smartmeta 2013-02-15 23:45:58

3

不,一個進程無法訪問另一個進程的內存,尤其是那些甚至沒有運行的進程,更不安全地使用其變量。

您可能正在尋找第一個腳本的服務器。它不會退出,它將繼續運行並接受命令(比如,通過其父代的STDIN,或通過任何進程的套接字),它將使用它在第一次啓動時構建的對象進行解析和執行。

+0

@ user1615551,已更新。 – ikegami 2013-02-15 23:55:38

+0

我認爲他的意圖是在2次調用之間存在某種持久性,並且可能更適合使用涉及Storable和臨時文件的某些東西,但當然與他提供的示例相比,事情變得更加複雜 – ArtM 2013-02-16 00:03:14