使用perl脚本显示文件夹

使用perl脚本显示文件夹,perl,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 ) {

我有下面的代码,我的问题是我不能修改它以便在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);
     }
}
($i=0;$i{ $path7='path_to'。@temp[$i]; foreach$path($path7){ opendir my($dh3),$path7或die$!; while(my$file3=readdir$dh3){ 下一步如果$file3 eq''或$file3 eq'.'; 接下来是-d catfile($path7,$file3); 打印“$file3\n”; } closedir($3); } }
您的
$file3
是在
的while
循环中,因为您用
my
声明了它。如果希望它在外部可用,请在更大的范围内声明,即在的
外部

my $file3; # here!
for ( ...) {
  # ...
    # ...    
    ######### no my below
      while ( $file3 = readdir $dh3 ) {
        # ...
      }
  # ...
}
请记住,在Perl中,最好在所需的最小范围内声明变量


还请注意,在
while
循环之外,它将开始是
未定义的
,并且在第一次处理
while
之后(
$i
为0,
$path
$path7
的值),
$file3
将保留上次
while
循环中的值,直到下次
while
循环开始。这绝对不是,因为您的
foreach
列表只有一个元素,因为
$path7
是标量而不是数组。事实上,根本不需要使用
foreach
循环。直接使用
$path7


因为变量名而与我的解释相混淆?我也是。始终选择有意义的完整变量名,而不仅仅是附加数字。这使得维护变得非常困难。:)

您的
$file3
while
循环,因为您使用
my
声明了它。如果希望它在外部可用,请在更大的范围内声明,即在
外部

my $file3; # here!
for ( ...) {
  # ...
    # ...    
    ######### no my below
      while ( $file3 = readdir $dh3 ) {
        # ...
      }
  # ...
}
请记住,在Perl中,最好在所需的最小范围内声明变量


还请注意,在
while
循环之外,它将开始是
未定义的
,并且在第一次处理
while
之后(
$i
为0,
$path
$path7
的值),
$file3
将保留上次
while
循环中的值,直到下次
while
循环开始。这绝对不是,因为您的
foreach
列表只有一个元素,因为
$path7
是标量而不是数组。事实上,根本不需要使用
foreach
循环。直接使用
$path7


因为变量名而与我的解释相混淆?我也是。始终选择有意义的完整变量名,而不仅仅是附加数字。这使得维护变得非常困难。:)

您的
$file3
while
循环,因为您使用
my
声明了它。如果希望它在外部可用,请在更大的范围内声明,即在
外部

my $file3; # here!
for ( ...) {
  # ...
    # ...    
    ######### no my below
      while ( $file3 = readdir $dh3 ) {
        # ...
      }
  # ...
}
请记住,在Perl中,最好在所需的最小范围内声明变量


还请注意,在
while
循环之外,它将开始是
未定义的
,并且在第一次处理
while
之后(
$i
为0,
$path
$path7
的值),
$file3
将保留上次
while
循环中的值,直到下次
while
循环开始。这绝对不是,因为您的
foreach
列表只有一个元素,因为
$path7
是标量而不是数组。事实上,根本不需要使用
foreach
循环。直接使用
$path7


因为变量名而与我的解释相混淆?我也是。始终选择有意义的完整变量名,而不仅仅是附加数字。这使得维护变得非常困难。:)

您的
$file3
while
循环,因为您使用
my
声明了它。如果希望它在外部可用,请在更大的范围内声明,即在
外部

my $file3; # here!
for ( ...) {
  # ...
    # ...    
    ######### no my below
      while ( $file3 = readdir $dh3 ) {
        # ...
      }
  # ...
}
请记住,在Perl中,最好在所需的最小范围内声明变量


还请注意,在
while
循环之外,它将开始是
未定义的
,并且在第一次处理
while
之后(
$i
为0,
$path
$path7
的值),
$file3
将保留上次
while
循环中的值,直到下次
while
循环开始。这绝对不是,因为您的
foreach
列表只有一个元素,因为
$path7
是标量而不是数组。事实上,根本不需要使用
foreach
循环。直接使用
$path7


因为变量名而与我的解释相混淆?我也是。始终选择有意义的完整变量名,而不仅仅是附加数字。这使得维护变得非常困难。:)

那些变量名会驱使我去嗅探胶水。那些变量名会驱使我去嗅探胶水。那些变量名会驱使我去嗅探胶水。那些变量名会驱使我去嗅探胶水。我总是认为——用它的功能来称呼它。如果您有多个具有相同角色的角色,这样您就可以对它们进行编号,这就是数组的作用所在。(即使这样,我仍然认为单独处理它们是不好的形式)我不认为您可以对$path7进行deref
,因为它是在前一行上组装的标量。不过,我不太确定那里的意图。@Sobrique你说得对。老实说,我没有读过代码的那一部分我总是想——用它的功能来称呼它。如果您有多个具有相同角色的角色,这样您就可以对它们进行编号,这就是数组的作用所在