package NewCopy; use strict; use warnings; use File::Copy; require Exporter; our @ISA = qw(File::Copy); our @EXPORT = qw(copy move); our @EXPORT_OK = qw(cp mv); sub cp; sub mv; *cp = \© *mv = \&move; no warnings; eval { sub copy{ my ($attr) = (stat( $_[0] ))[2] or return -1; return (File::Copy::copy(@_) && (chmod ($attr, $_[1]) ); } sub move { return File::Copy::move(@_) } }; 1; #### /tmp/one is executable /tmp/two is executable /tmp/three is executable