sub start_magick { use strict; use warnings; use 5.010; use Path::Class; use File::Copy "cp"; my ($rvars) = shift; my %vars = %$rvars; # this is supposed to be instantiated once my @alphabet = qw/a b c d e f g h j k m n p q r s t u v w x y z/; my $ref_alpha = \@alphabet; my $initial = $alphabet[0]; my $path1 = $vars{"to_images"}; my $path2 = $vars{"to_magick"}; #might need creating: my $return = mkdir($path2); say "return on mkdir is $return"; #additions to main hash $vars{"target"} = 100; #k $vars{"bias"} = 2; #k $vars{"pixel_min"} = 600; #k $vars{"previous_file"} = $initial; $vars{"ref_alpha"} = $ref_alpha; #get filenames minus directories my @basenames; opendir my $hh, $path1 or warn "warn $!\n"; while ( defined( $_ = readdir($hh) ) ) { next if ( $_ =~ m/^\./ ); say "default is $_"; push @basenames, $_; } @basenames = sort @basenames; for (@basenames){ my $file1 = file( $path1, $_ ); $_ =~ /(.*)\.(.*)/; my $ext = $2; my $word = join( '', $vars{"previous_file"}, '.', $ext ); my $next = next_file($rvars, $word); say "next is $next"; $next =~ /(.*)\.(.*)/; my $newword = $1; $vars{"previous_file"} = $newword; my $file2 = file( $path2, $word ); cp ("$file1","$file2"); } } sub next_file { use strict; use warnings; use 5.010; my ($rvars, $previous) = @_; my %vars = %$rvars; my $array_ref = $vars{"ref_alpha"}; #### default is Screenshot from 2014-08-21 13:10:18.png default is Screenshot from 2014-09-25 17:14:08.png default is Screenshot from 2014-08-21 13:22:42.png default is zbears.jpg default is yjj.jpg Can't use an undefined value as an ARRAY reference at template_stuff/nibley1.pm line 116. $