Я довольно новичок в Perl, но я предполагал, что имел в виду основы, такие как определение переменных и область видимости ... но, похоже, это не так. Моя проблема заключается в том, что я держу на натыкаясь ошибки:Perl: Глобальный символ «% s» требует явного имени пакета
Global symbol "$save_from_date" requires explicit package name at myMover.pl line 40
У меня есть функция, в которой я намерен сравнить дату файла по сравнению с другой даты (по умолчанию или аргумент), но это не удается.
Вот хлопотно код, экстракт:
# Process source directory
sub ParseSource {
my $file = $_;
my $filedate = localtime((stat $file)[9])->ymd('');
if ($filedate >= $save_from_date) {
print "[To Archive] $file";
}
}
# Default Values
my $source_directory = 'C:\Users\Public\Documents';
my $destination_directory = 'C:\Users\Public\Documents\Archive';
my $save_from_date = strftime "%Y%m%d", localtime;
my ($verboseornotverbose, $display_help) = undef;
GetOptions(
"verbose!" => \$verboseornotverbose,
"help|h!" => \$display_help,
"source_dir|s:s" => \$source_directory,
"destination_dir|d:s" => \$destination_directory,
"date|t:i" => \$save_from_date
);
usage() if $display_help;
# Basic checks
unless (-d $source_directory) { die "ERROR -- Source directory [$source_directory] does not exists" }
unless (-d $destination_directory) {
unless (mkdir $destination_directory) {
die "ERROR -- Destination directory $destination_directory does not exists and couldn't be created'";
}
}
unless ($save_from_date <= strftime "%Y%m%d", localtime) {
die "ERROR -- Wrong or unknown date format [$save_from_date] should be before or equal today\'s' date'";
}
print $save_from_date ;
# Here we parse the source directory
find(\&parseSource, $source_directory);
Это сравнение, которое не удается: if ($filedate >= $save_from_date)
Не могли бы вы объяснить мне, что я пропустил в этом суб?
Я прочитал множество других постов и некоторые учебники определения переменных, но я не мог получить ключ от моей проблемы ...
Спасибо!
Определения функций , –