To jest mój pierwszy skrypt Perla. Ever:Czy istnieje skuteczniejszy sposób generowania losowego pliku w Perlu?
#!/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);
Jego celem jest generate a file in a specified size filled with random characters.
To działa, ale jest dość powolna. Napisanie losowego pliku 10 MB zajmuje kilka sekund.
Czy ktoś ma sugestie/wskazówki, jak zrobić to szybciej/lepiej? Możesz również wskazać typowe błędy dla początkujących.
I * think * Perl działa najlepiej w porcjach 4k wysyłanych do strumienia. Powiązane ze zmianą rozmiaru bufora strumieniowego: http://stackoverflow.com/questions/1251062/how-can-i-set-the-file-read-buffer-size-in-perl-to-optimize-it-for -duże pliki – Incognito
Dlaczego używasz 'my $ rand = int (rand ($ range ** 4))' i 'chr ($ rand% $ range + $ minimum)' zamiast po prostu 'my $ rand = int (rand ($ range) 'i' chr ($ rand + $ minimum) '? – Alexander
' rand ($ range ** 4) 'zawiera wystarczającą ilość informacji do wygenerowania 4 losowych znaków – mob