use warnings; use strict; use File::Copy; use File::Find::Rule; my $from_dir = '/home/steve/repos/berrybrew'; my $to_dir = 'out'; my @files = File::Find::Rule->file() ->name('*.txt', '*.cs') ->in($from_dir); for (@files){ copy $_, $to_dir or die $!; } #### ->in($from_dir) ->maxdepth(0); # descend zero levels below root of $from_dir