The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/app/bin/perl

eval 'exec /usr/app/bin/perl  -S $0 ${1+"$@"}'
    if 0; # not running under some shell

use Gimp qw(:auto __ N_);
use Gimp::Fu;

#Gimp::set_trace(TRACE_ALL);

register	"repdup",
		"Repeats and duplicates a selection.",
		"Hopefully self-explanatory...",
		"Claes G Lindblad <claesg\@algonet.se>",
		"Claes G Lindblad <claesg\@algonet.se>",
		"990328",
		N_"<Image>/Edit/Repeat & Duplicate...",
		"*",
		[
		[PF_SPINNER, "repeats", "Number of repeats",
			3, [1, 1000, 1] ],
		[PF_SPINNER, "xoffset", "X-offset",
			50, [-1000, 1000, 1] ],
		[PF_SPINNER, "yoffset", "Y-offset",
			50, [-1000, 1000, 1] ],
		],
	sub {
		my ($img, $layer, $repeats, $xoffset, $yoffset) = @_;

		eval { $img->undo_push_group_start };
		@b  = gimp_selection_bounds($img);
		my $w = $b[3] - $b[1];
		my $h = $b[4] - $b[2];
		gimp_edit_copy($layer);
		gimp_selection_none($img);
		for ($i = 0; $i < $repeats; $i++) {
			$b[1] = $b[1] + $xoffset;
			$b[2] = $b[2] + $yoffset;
			gimp_rect_select($img, $b[1], $b[2], $w, $h, REPLACE, 0, 0);
			$bit_bucket = gimp_edit_paste($layer, 0);
			gimp_floating_sel_anchor($bit_bucket);
			gimp_selection_none($img);
		}
		eval { $img->undo_push_group_end };
		return $img;
	};
exit main;