use strict; use warnings; use feature 'say'; use Time::HiRes 'time'; use Imager; sub get_RGB_triplet { map { int rand 256 } 0 .. 2 } { my $i = Imager-> new( xsize => 1000, ysize => 1000 ); my $t = time; for my $y ( 0 .. 999 ) { for my $x ( 0 .. 999 ) { my $c = Imager::Color-> new( get_RGB_triplet ); $i-> setpixel( x => $x, y => $y, color => $c ) } } say time - $t; } { my $i = Imager-> new( xsize => 1000, ysize => 1000 ); my $t = time; for my $y ( 0 .. 999 ) { my $packed_line = ''; for my $x ( 0 .. 999 ) { $packed_line .= pack 'C3x', get_RGB_triplet; } $i-> setscanline( y => $y, pixels => $packed_line ) } say time - $t; } __END__ 5.78085088729858 0.599802017211914