in reply to passing a variable value to Unix command

First, if you want to append a * to the value, it needs to be quoted:

my $name = $k."*";

Second, running that command several times, once for each element in the list, can be veeeeerrrryyyyy ssllllloooooooowwww. Most (all?) platforms' find utilities will let you do something like this ...

my $args = join(" -o ", map { "-name \"$_*\" -print" } @a); $x = `find . $cmd`;
and do it all in one go. Although obviously at some point you're going to run into command line length limitations.