我有以下代码,我的问题是我无法修改它以便在for函数之外使用$ file3
for ($i = 0; $i < scalar(@temp); $i++){
$path7 = 'path_to'.@temp[$i];
foreach $path ($path7){
opendir my ($dh3), $path7 or die $!;
while ( my $file3 = readdir $dh3 ) {
next if $file3 eq '.' or $file3 eq '..';
next unless -d catfile($path7, $file3);
print "$file3\n";
}
closedir ($dh3);
}
}
答案 0 :(得分:3)
$file3
while
my
为for
循环,因为您使用my $file3; # here!
for ( ...) {
# ...
# ...
######### no my below
while ( $file3 = readdir $dh3 ) {
# ...
}
# ...
}
声明了它。如果您希望它在外面可用,请在更大的范围内声明,即在while
之外。
undef
请记住,在Perl中,在必要的最小范围内声明变量是一种很好的做法。
另请注意,在while
循环之外,它将从$i
开始,并在第一次处理$path
后完成($path7
为0,{{ 1}}是$file3
)的值,while
将保留它在while
循环的最后一轮中的值,直到下一次foreach
循环开始。这绝不是,因为您的$path7
列表只有一个元素,因为foreach
是标量而不是数组。实际上,根本不需要$path7
循环。只需直接使用SELECT * FROM employees
WHERE first_name LIKE '&letter%';
。
由于变量名称,我对我的解释感到困惑?我也是。总是选择有意义的变量名,不要只追加数字。这使得维护非常困难。 :)