use Path::Tiny; path('fred')->visit( sub { -f || -d and $tar->add_files($_) }, {recurse => 1} ); #### use Archive::Tar; my $tar = Archive::Tar::->new(); my @filenamelist; use Path::Tiny; path('fred')->visit( sub { -f || -d and push @filenamelist, "$_" }, {recurse => 1} ); $tar->add_files(@filenamelist); $tar->write("fred.tar.gz", COMPRESS_GZIP);