Deseo insertar un código C en Perl. En este código C, quiero leer un gran archivo en la memoria, hacer algunos cambios y crear un hash (uno personalizado). Deseo hacer accesible este hash desde mi código Perl. ¿Es posible? ¿Cómo puedo alcanzar el objetivo?¿Cómo puedo construir un hash Perl en código C?
5
A
Respuesta
3
- Ver Internals and C language interface
- también echar un vistazo a Inline-C para incrustado un código C en Perl: El Inline module que permite al código fuente aportaciones de otras lenguajes de programación directamente "en línea" en un script Perl o módulo . El código se compila automáticamente como necesario, y luego se carga para el acceso inmediato desde Perl.
Lea también Why should I use Inline to do it?
1
Puede utilizar SWIG hacer de interfaz entre C, Perl, y varios otros idiomas.
11
Para incrustar c en perl, está buscando XS. Se puede encontrar una amplia documentación sobre esto en perlxs
y perlxstut
.
En cuanto a la construcción de estructuras de datos perl desde C, tendrá que usar las partes del perlapi
que se ocupan de los hashes. Mucha documentación sobre XS ya explica varios bits de eso. Las partes importantes que estás buscando son newHV
y hv_store
.
Aquí hay una pequeña (y no está comprobado) ejemplo de algo similar a lo que es posible que desee hacer:
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
Esa es una subrutina XS llamada some_func
, que va a construir un hash y devolver una referencia a ella perl space:
my $href = some_func();
# $href = { foo => 42, bar => 23 };
Cuestiones relacionadas
- 1. ¿Cómo puedo combinar varios hashes en un hash en Perl?
- 2. ¿Cómo puedo probar que "algo" es un hash en Perl?
- 3. ¿Cómo puedo imprimir el contenido de un hash en Perl?
- 4. ¿Cómo puedo interpolar un elemento hash Perl en una cadena?
- 5. ¿Cómo puedo construir un árbol genealógico con Perl?
- 6. En Perl, ¿cómo proceso un hash completo?
- 7. ¿Cómo puedo obtener una parte única de hash en Perl?
- 8. ¿Cómo puedo ordenar un hash de hash por clave en Perl?
- 9. Constantes hash en Perl
- 10. ¿Cómo puedo construir XML en C#?
- 11. ¿Cómo puedo almacenar múltiples valores en una tabla hash Perl?
- 12. ¿Cómo puedo hacer una nueva referencia hash vacía en Perl?
- 13. Cómo borrar un hash de Perl
- 14. ¿Cómo cargo un archivo en un hash Perl?
- 15. ¿Cómo puedo convertir Perl en C?
- 16. ¿Cómo puedo representar los enlaces simbólicos de un sistema de archivos en un hash Perl?
- 17. ¿Cómo creo un hash de hashes en Perl?
- 18. ¿Cómo puedo crear un qr // en Perl 5.12 desde C?
- 19. ¿Cómo presiono un valor en un hash Perl de matrices?
- 20. Cómo construir un archivo de manifiesto para un módulo Perl
- 21. ¿Cómo puedo embellecer el código de Perl generado por Perl?
- 22. cómo verificar si un hash está vacío en perl
- 23. ¿Cómo puedo llamar a una subrutina cuyo nombre es un valor en un hash, en Perl?
- 24. ¿Cómo puedo generar un código hash a partir de una matriz de bytes en C#?
- 25. Atravesar un hash multidimensional en Perl
- 26. Perl Hash de subfunciones
- 27. ¿Cómo paso un hash a una función en Perl?
- 28. hash de construcción dinámica/recursiva en Perl?
- 29. Perl: ¿cómo puedo poner todo mi código en línea C en un archivo separado?
- 30. ¿Cómo calcula C# el código hash de un objeto?
Por favor, deje de recomendar Inline como la solución estándar de facto para tales cosas. Es una pesadilla de implementación. A menos que el requisito sea específicamente "Necesito hacer esto en mi máquina y mi máquina solamente", Inline se traduce en problemas en el futuro. – tsee
Escribiré el código XS cuando sea necesario, pero cuando no es necesario, Inline :: C es increíble. – mob