in reply to system qw()

That's completely expected with qw() as it disables all variable interpolation. It simply splits the string on white space and turns that into a list of values - convenient since rather than "bla", "bla", "bla", you can just write qw(bla bla bla). In this case, to get the variable values, just close the qw() for a second: system(qw(updquery -sdate), $sdate, "-edate", $edate, qw(-brtype golden -status closed)); You could just mash it all into a string for less typing, but using a list when calling system is good practice. See perldoc -f system.

Makeshifts last the longest.