Bien, entonces estoy usando Perl para leer en un archivo que contiene algunos datos de configuración general. Esta información está organizada en encabezados según lo que significan. Un ejemplo es el siguiente:Usar perl para dividir una línea que puede contener espacios en blanco
[vars]
# This is how we define a variable!
$var = 10;
$str = "Hello thar!";
# This section contains flags which can be used to modify module behavior
# All modules read this file and if they understand any of the flags, use them
[flags]
Verbose = true; # Notice the errant whitespace!
[path]
WinPath = default; # Keyword which loads the standard PATH as defined by the operating system. Append with additonal values.
LinuxPath = default;
Objetivo: El uso de la primera línea como un ejemplo "$ var = 10;", me gustaría utilizar la función de división en Perl para crear una matriz que contiene los caracteres "$ var "y" 10 "como elementos. El uso de otra línea como un ejemplo:
Verbose = true;
# Should become [Verbose, true] aka no whitespace is present
Esto es necesario porque voy a dar salida a estos valores en un nuevo archivo (que leerá una pieza diferente de código C++) para crear instancias de objetos de diccionario. Sólo para dar una pequeña muestra de lo que podría ser similar (inventando sobre la marcha):
define new dictionary name: [flags] # Start defining keys => values new key name: Verbose new value val: 10 # End dictionary
Ah, y aquí está el código que tengo actualmente, junto con lo que está haciendo (incorrectamente) :
sub makeref($)
{
my @line = (split (/=/)); # Produces ["Verbose", " true"];
}
para responder a una pregunta, ¿por qué no estoy utilizando Config :: simple, es que inicialmente no sabía lo que mi archivo de configuración se vería así, sólo lo que quería que hiciera. Lo inventé a medida que avanzaba, al menos lo que me pareció sensato, y usé Perl para analizar el archivo.
El problema es que tengo un código C++ que cargará la información en el archivo de configuración, pero como el análisis en C o C++ es :(Decidí usar Perl. También es un buen ejercicio de aprendizaje para mí ya que soy nuevo al lenguaje. Así que ese es el problema, este código perl no es realmente parte de mi aplicación, simplemente hace que sea más fácil para el código C++ leer la información. Y es más legible (tanto el archivo de configuración como el archivo generado).). Gracias por los comentarios, lo que realmente ayudó.
No utilice prototipos a menos que sean necesarios. Incluso entonces, piensa tres veces. http://perldoc.perl.org/perlsub.html#Prototypes * Todo esto es muy poderoso, por supuesto, y debe usarse solo con moderación para hacer del mundo un lugar mejor. * –
Consulte la respuesta de FM. Realmente no debería estar escribiendo su propio analizador de archivos para realizar un trabajo tan común y estándar: use CPAN y concéntrese en la lógica de su aplicación. – Ether