使用perl脚本显示文件夹

时间:2015-09-09 13:26:26

标签: perl

我有以下代码,我的问题是我无法修改它以便在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);
     }
}

1 个答案:

答案 0 :(得分:3)

$file3 while myfor循环,因为您使用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%';

由于变量名称,我对我的解释感到困惑?我也是。总是选择有意义的变量名,不要只追加数字。这使得维护非常困难。 :)