in reply to How to correctly import variables to a module ?

I would actually go a different way here. Instead of using variables, use functions. And don't return the string, accept the arguments. This would allow you to do things such as swap out implementations later. So, instead of:

system($cp, $from, $to);
call:
cp($from, $to);
And then your function can start by just calling:
sub cp { system('/bin/cp', @_); }
but later, it can become:
sub cp { require File::Copy; File::Copy::cp(@_); #doesn't work for wildcards, I think. # File::Copy::cp(map {glob $_}, @_) # <-- might be needed for wildca +rds }
Similarly for other commands. So you can't convert everything at once to pure perl. No big deal. You can convert what you find you need to, when you need to.

Reasons for this approach:

At least, that's my approach. :-)