我希望在Perl中嵌入C代碼。在這個C代碼中,我想將一個巨大的文件讀入內存,進行一些更改並構建一個哈希(自定義)。我希望從我的Perl代碼中訪問這個哈希。可能嗎?我怎樣才能達到目標?如何在C代碼中構建Perl哈希?
5
A
回答
3
- 見Internals and C language interface
- 也有在Perl看看Inline-C用於嵌入C代碼:該Inline module讓你 放源代碼從其他 編程語言直接 「內聯」在Perl腳本或模塊。 該代碼自動編譯爲 需要,然後加載立即從Perl訪問 。
1
您可以使用SWIG C,Perl和其他幾種語言之間的接口。
11
對於在perl中嵌入c,您正在尋找XS。關於這方面的大量文檔可以在perlxs
和perlxstut
中找到。至於從C構建perl數據結構,您將不得不使用perlapi
中處理散列的部分。關於XS的許多文檔已經解釋了各種各樣的內容。您正在尋找的重要部分是newHV
和hv_store
。
這裏是類似於你可能想要做什麼東西微小的(和完全未經測試)例如:
SV *
some_func()
PREINIT:
HV *hash;
CODE:
hash = newHV();
hv_stores(hash, "foo", 3, newSViv(42));
hv_stores(hash, "bar", 3, newSViv(23));
RETVAL = newRV_noinc((SV *)hash);
OUTPUT:
RETVAL
這就是所謂的some_func
一個XS子程序,這將建立一個哈希值,並返回對它的引用到perl空間:
my $href = some_func();
# $href = { foo => 42, bar => 23 };
相關問題
- 1. 如何使用SWIG在C中構建Perl哈希?
- 2. 如何使用Perl構建哈希表
- 3. 哈希哈希在Perl中
- 4. 如何從Perl中的哈希數組創建哈希散列?
- 5. Perl哈希哈希
- 6. 如何構建Git哈希?
- 7. 從Perl哈希構建XML模式?
- 8. 哈希在Perl
- 9. 的Perl - 哈希結構
- 10. 在perl中迭代哈希值
- 11. 構建數據結構 - 哈希數組的哈希哈希
- 12. 無法在Perl中創建哈希?
- 13. 如何在C#中構建哈希表存儲對象?
- 14. 如何構建一個Perl多維數組或哈希?
- 15. 在Perl中使用XML :: DOM構建哈希樹
- 16. 在perl中合併哈希
- 17. 在Perl中哈希陣列
- 18. Perl中,存儲在哈希
- 19. 如何在C#/ Bouncy Castle中創建PBKDF2-SHA256密碼哈希
- 20. 如何通過哈希值的數組迭代的哈希在Perl
- 21. Perl的哈希
- 22. 在javascript中構建哈希表和完美的哈希函數
- 23. 如何在matlab中使用座標作爲哈希鍵來構建哈希表?
- 24. 如何在Objective-C中實現Perl哈希?
- 25. 如何在perl中創建散列哈希?
- 26. 如何在Perl中創建散列哈希?
- 27. 如何在Perl中創建數組和哈希值?
- 28. 如何創建哈希數組並在Perl中循環它們?
- 29. 如何在Perl中創建一個新的空哈希引用?
- 30. 如何從Perl中刪除哈希鍵?
哦,請停止建議Inline作爲事實上的標準解決方案。這是部署的噩夢。除非特別要求「我需要在我的機器和我的機器上執行此操作」,否則Inline會轉而解決問題。 – tsee 2010-10-05 13:00:54
當我必須的時候我會寫XS代碼,但是當我不需要時,Inline :: C很棒。 – mob 2010-10-05 14:56:55