我有这个:
use constant JAR_FILE => qr/\.jar$/;
my @dir_list = ...;
my @jar_list;
find ( sub {
return unless -f;
return unless JAR_FILE; #THIS IS THE TROUBLED LINE
push @jar_list, $File::Find::name;
}, @dir_list;
say join ": ", @jar_list;
这会打印出所有的文件@dir_list
——jar 文件和非 jar 文件;
然而,这:
use constant JAR_FILE => qr/\.jar$/;
my @dir_list = ...;
my @jar_list;
find ( sub {
return unless -f;
return unless $_ =~ JAR_FILE; #Now explicitly do the comparison
push @jar_list, $File::Find::name;
}, @dir_list;
say join ": ", @jar_list;
只打印出 jar 文件。
这也只打印出 jar 文件:
# use constant JAR_FILE => qr/\.jar$/;
my @dir_list = ...;
my @jar_list;
find ( sub {
return unless -f;
return unless /\.jar$/; #Use regex and not constant regex.
push @jar_list, $File::Find::name;
}, @dir_list;
say join ": ", @jar_list;
为什么第一个return unless JAR_FILE;
不起作用,return unless $_ =~ JARFILE;
而return unless /\.jar$/;
两者都起作用?