Max*_*ime 0 variables perl global explicit
我是Perl的新手,但我认为我已经记住了变量定义和范围等基础知识......但似乎并非如此.我的问题是我不断碰到错误:
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 );
Run Code Online (Sandbox Code Playgroud)
这是失败的比较:
if ($filedate >= $save_from_date)
你能解释一下我在那个潜艇里错过了什么吗?
我已经阅读了很多其他帖子和一些变量定义教程,但我无法得到我的问题的线索......
谢谢 !
解析sub时不声明变量.在sub之前移动变量声明,或者将变量作为参数传递给sub.
更新:您无法直接将参数传递给File :: Find中的wanted子参数.但是,你可以将它包装在一个匿名子:
sub parseSource {
my $save_from_date = shift;
# ...
}
# ...
find( sub { parseSource($save_from_date) }, $source_directory );
Run Code Online (Sandbox Code Playgroud)