Arrays 检查数组数组中是否有一个数组为空

Arrays 检查数组数组中是否有一个数组为空,arrays,perl,Arrays,Perl,我正在编写一个perl脚本,其中应该有一个数组。此数组查找当前目录中的所有文件夹,然后数组的大小取决于文件夹。子数组包含包含的所有文件名。我可能有一个空文件夹,但我仍然想为它创建一个数组 my $root = "myCurrenDir"; @test = grep { -d "$root/$_" } read_dir($root); my @array = ? # how can be defined 假设当前目录中有两个文件夹。然后父数组包含两个作为子数组的数组。(也许其中一个是空的) 然后

我正在编写一个perl脚本,其中应该有一个数组。此数组查找当前目录中的所有文件夹,然后数组的大小取决于文件夹。子数组包含包含的所有文件名。我可能有一个空文件夹,但我仍然想为它创建一个数组

my $root = "myCurrenDir";
@test = grep { -d "$root/$_" } read_dir($root);
my @array = ? # how can be defined
假设当前目录中有两个文件夹。然后父数组包含两个作为子数组的数组。(也许其中一个是空的)

然后我想检查(两个)数组是否为空,然后继续执行下一步

我在谷歌上搜索了一下,但找不到一个明确的解决办法。我可以请你帮忙吗?
(可能很简单,但我坚持!)。

在标量上下文中计算数组将返回数组中的元素数。我们可以用它来实现简单的逻辑,检查数组是否包含任何数据

if (@array) {
  # @array contains data
} else {
  # @array contains no data
}
如果有一个数组包含对其他数组的引用,那么我们仍然可以使用相同的逻辑-我们只需要取消对数组引用的引用

if (@{ $array[0] }) {
  # $array[0] contains data
} else {
  # $array[0] contains no data
}
当然,我们可能希望在循环中检查
@array
,以处理所有子数组

for (@array) {
  if (@$_) {
    # child array contains data
  } else {
    # child array contains no data
  }
}
这有用吗


此外,如果您正在遍历目录树,那么可能是一种更简单的方法。

在标量上下文中计算数组将返回数组中的元素数。我们可以用它来实现简单的逻辑,检查数组是否包含任何数据

if (@array) {
  # @array contains data
} else {
  # @array contains no data
}
如果有一个数组包含对其他数组的引用,那么我们仍然可以使用相同的逻辑-我们只需要取消对数组引用的引用

if (@{ $array[0] }) {
  # $array[0] contains data
} else {
  # $array[0] contains no data
}
当然,我们可能希望在循环中检查
@array
,以处理所有子数组

for (@array) {
  if (@$_) {
    # child array contains data
  } else {
    # child array contains no data
  }
}
这有用吗


另外,如果您正在遍历目录树,那么可能是一种更简单的方法。

我认为这可能对您有用

use warnings;
use strict;

my @arr_repository;
#declare working directory
my $root = ".";      
opendir ROOT, $root or die "$root:$!";
#creating list of directories in working
my @list_of_dirs=sort (grep (!/^(\.|\.\.)$/ && -d   "$root/$_",readdir(ROOT)));     directory
foreach my $dirName (@list_of_dirs) {
        my @arr_ref_fileList;
        #reading files in directory and inserting them in array_ref
        my $arr_ref_fileList = read_directory($dirName);
        #adding array with filenames into array     
        push @arr_repository, [@$arr_ref_fileList];    
        }

sub read_directory {
    my $input_dir = shift;
    opendir IN,$input_dir or die "$input_dir:$!";
    my @list_of_files=sort (grep (!/^(\.|\.\.)$/ && -f "$input_dir/$_",readdir(IN))); # reading only files, avoiding  "." and ".."
    closedir(IN);
    return \@list_of_files;
    }
  • 您可能想改用数组散列,然后您将能够看到哪个目录包含哪些文件

    $hash_repository->{$dirName} = [@$arr_ref_fileList];
    
  • 如果正在检查的目录本身包含目录,您可能希望使脚本递归


  • 我想这可能对你有用

    use warnings;
    use strict;
    
    my @arr_repository;
    #declare working directory
    my $root = ".";      
    opendir ROOT, $root or die "$root:$!";
    #creating list of directories in working
    my @list_of_dirs=sort (grep (!/^(\.|\.\.)$/ && -d   "$root/$_",readdir(ROOT)));     directory
    foreach my $dirName (@list_of_dirs) {
            my @arr_ref_fileList;
            #reading files in directory and inserting them in array_ref
            my $arr_ref_fileList = read_directory($dirName);
            #adding array with filenames into array     
            push @arr_repository, [@$arr_ref_fileList];    
            }
    
    sub read_directory {
        my $input_dir = shift;
        opendir IN,$input_dir or die "$input_dir:$!";
        my @list_of_files=sort (grep (!/^(\.|\.\.)$/ && -f "$input_dir/$_",readdir(IN))); # reading only files, avoiding  "." and ".."
        closedir(IN);
        return \@list_of_files;
        }
    
  • 您可能想改用数组散列,然后您将能够看到哪个目录包含哪些文件

    $hash_repository->{$dirName} = [@$arr_ref_fileList];
    
  • 如果正在检查的目录本身包含目录,您可能希望使脚本递归


  • 所以
    @test
    现在只包含目录,您想在
    $root
    中找到所有文件并将它们放入
    @array
    ?这正是我想要做的。试试
    chdir$root@array=grep-f,
    当您有带有子目录列表的“@test”时。难道你不想在“@test”中找到每个项目(subdir)中的所有文件,并将它们作为子数组添加到“@array”中吗?因此
    @test
    现在只包含目录,你想在
    $root
    中找到所有文件并将它们放入
    @array
    中?这正是我想要做的@array=grep-f,当您有带有子目录列表的“@test”时。您不想在“@test”中找到每个项目(subdir)中的所有文件,并将它们作为子数组添加到“@array”中吗?非常感谢您的回答。这就是我想要的!非常感谢你的回答。这就是我想要的!