in reply to Error using system() and tar with several options

What you probably should do, for learning purposes of course, is save this script as mytar:

#!/usr/bin/perl use strict; use warnings; for (0..$#ARGV) { print "$_:[$ARGV[$_]]\n"; }
And then see what comes out when you run mytar instead of tar.

What you'll find is that "csv --exclude-from=$excludes -f" become one parameter, not individual parameters. However, if you change your system call to be system("mytar czv --exclude-from -f $storageLocation$archiveName $archiveDir"), you'll notice they're separate flags. That's because system (ok, the shell) will split the parameters on spaces if you pass in a single parameter, but not if you pass in multiple parameters. This makes it easy to pass in flags with spaces without having to worry about the shell's quoting rules inside perl's quoting rules.

So, the fix? Keep separate flags separate:

my @args = ( qw(/bin/tar czv), "--exclude-from=$excludes", qw(-f), $storageLocati +on.$archiveName, $archiveDir );
That should help. :-)