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