opendir(DIRHANDLE, $self->param('photos_dir')) or die "couldn't open main directory: $!"; $dir_row_count = 0; $file_count = 0; $row_limit = 5; while (defined($filename = readdir(DIRHANDLE))) { next if $filename =~ /^\.\.?$/ || !(-d $filename); push @$dir_list, { dir => $filename, dir_row => [] }; opendir(SUBDIRHANDLE, "$filename") or die "couldn't open directory $filename: $!"; my @pictures = grep { /\.(?:png|gif|jpg)$/ } readdir SUBDIRHANDLE; closedir(SUBDIRHANDLE); push @{$dir_list->[scalar @$dir_list - 1]{dir_row}}, { file_row => [] }; $file_count = 0; foreach (@pictures) { unless ($file_count % $row_limit) { push @{$dir_list->[scalar @$dir_list - 1]{dir_row}}, { file_row => [] }; } push @{$dir_list->[scalar @$dir_list - 1]{dir_row}[$dir_row_count]{file_row}}, { filename => "$filename/$_", alt => $_ }; $file_count++; } $dir_row_count++; }