Este es mi primer script de Perl. Nunca:¿Existe alguna forma más eficiente de generar un archivo aleatorio en Perl?
#!/usr/bin/perl
if ($#ARGV < 1) { die("usage: <size_in_bytes> <file_name>\n"); }
open(FILE,">" . $ARGV[0]) or die "Can't open file for writing\n";
# you can control the range of characters here
my $minimum = 32;
my $range = 96;
for ($i=0; $i< $ARGV[1]; $i++) {
print FILE chr(int(rand($range)) + $minimum);
}
close(FILE);
Su propósito es generate a file in a specified size filled with random characters.
Funciona, pero es bastante lento. Lleva unos segundos escribir un archivo aleatorio de 10MB.
¿Alguien tiene sugerencias/consejos sobre cómo hacerlo más rápido/mejor? También siéntase libre de señalar los errores comunes de los principiantes.
I * think * perl funciona mejor en 4k fragmentos enviados a la transmisión. Relacionado SO para cambiar el tamaño del búfer de la secuencia: http://stackoverflow.com/questions/1251062/how-can-i-set-the-file-read-buffer-size-in-perl-to-optimize-it-for -grandes archivos – Incognito
¿Por qué usas 'my $ rand = int (rand ($ range ** 4))' y 'chr ($ rand% $ range + $ minimum)' en lugar de solo 'my $ rand = int (rand ($ range) 'y' chr ($ rand + $ minimum) '? – Alexander
' rand ($ range ** 4) 'contiene suficiente información para generar 4 caracteres aleatorios – mob