Te faltan poner las llaves en el if(). No almacenas cada trozo como elemento del
@array. Eso se hace fácil con push(). Y en vez de split(), puedes sacar el trozo con substr().
Queda:
Using perl Syntax Highlighting
#!/usr/bin/perl
$var1 = "cadena123456789abcdef";
$j = length($var1);
for($i = 0; $i < $j; $i++) {
if (($i % 3
) == 0
) {
push @array, substr($var1, $i, 3
);
}
}
use Data
::Dumper;
print Dumper
\@array;Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Sale:
- Código: Seleccionar todo
$VAR1 = [
'cad',
'ena',
'123',
'456',
'789',
'abc',
'def'
];
Ahora bien, ir incrementando la variable $i de uno en uno, y a la vez comprobar si es múltiplo de 3, pues se puede reducir a lo que te dice creating021:
Using perl Syntax Highlighting
for($i = 0; $i < $j; $ i
+= 3
) {
push @array, substr($var1, $i, 3
);
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Se puede hacer de muchas formas. Incluso hasta con expresiones regulares:
Using perl Syntax Highlighting
while ($var1 =~ m/(...)/g) {
push @array, $1;
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
El problema, en esta solución, es si la cadena no es de longitud múltiplo de 3, pues entonces no captura el final.
Una forma de resolverlo es ajustando un poco más la expresión regular:
Using perl Syntax Highlighting
while ($var1 =~ m/(.{1,3})/g) {
push @array, $1;
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
en la que buscamos bloques de entre 1 y 3 caracteres. La expresión regular siempre intentará escoger el bloque mayor (el de 3 caracteres), pero en el último bloque puede que no sea así, por lo que capturará los que resten, sea uno o dos caracteres.