Perl 一种更简单的方法,从目录开始,构建文件名的散列
我正在从一个目录中读取,我正在搜索文件名和扩展名。唯一接受的扩展名是Perl 一种更简单的方法,从目录开始,构建文件名的散列,perl,file,hash,directory,Perl,File,Hash,Directory,我正在从一个目录中读取,我正在搜索文件名和扩展名。唯一接受的扩展名是in和out。如果我得到一个正匹配,我将收集到的信息添加到一个散列中 假设这个散列可以是这样的: #{ # filename1 => { # in => 1|0 # out => 1|0 # }, # ..., # filenameN => { # in => 1|0, # out => 1|0 # } #} 我正在使用此代码段执行上述所有
in
和out
。如果我得到一个正匹配,我将收集到的信息添加到一个散列中
假设这个散列可以是这样的:
#{
# filename1 => {
# in => 1|0
# out => 1|0
# },
# ...,
# filenameN => {
# in => 1|0,
# out => 1|0
# }
#}
我正在使用此代码段执行上述所有操作:
...
while ( my $file = readdir INDIR ) {
my ( $file_name, $file_ext ) = $file =~ /^(\w+)\.([^.]+)$/;
next if not( $file_name and $file_ext );
next if not( $file_ext =~ /in|out/ );
$hash{$file_name}->{$file_ext} = 1;
}
...
我想知道是否有更好的方法来实现相同的预期结果,可能就是级联而不是两个next if
语句
您有什么建议来简化该代码段吗?如果使用
my ($file_name, $file_ext) = $file =~ /^(\w+)\.(in|out)$/ or next;
或者让模块进行文件解析
use File::Basename;
# ..
my ($file_name,undef,$file_ext) = fileparse($file, "in", "out");
next if !$file_ext;
如果条件为
my ($file_name, $file_ext) = $file =~ /^(\w+)\.(in|out)$/ or next;
或者让模块进行文件解析
use File::Basename;
# ..
my ($file_name,undef,$file_ext) = fileparse($file, "in", "out");
next if !$file_ext;
在mpapec的基础上,我更喜欢生产线开始时的控制流功能
while ( my $file = readdir INDIR ) {
next if $file !~ /^(\w+)\.(in|out)$/;
$hash{$1}{$2} = 1;
}
或者更清楚地说:
while ( my $file = readdir INDIR ) {
if ($file =~ /^(\w+)\.(in|out)$/) {
$hash{$1}{$2} = 1;
}
}
在mpapec的基础上,我更喜欢生产线开始时的控制流功能
while ( my $file = readdir INDIR ) {
next if $file !~ /^(\w+)\.(in|out)$/;
$hash{$1}{$2} = 1;
}
或者更清楚地说:
while ( my $file = readdir INDIR ) {
if ($file =~ /^(\w+)\.(in|out)$/) {
$hash{$1}{$2} = 1;
}
}
我远离
,除非我是粉丝,但我很想在这里使用它。我也同样很想。还考虑了if代码>。如果不是因为我们捕获变量的事实,当前的设置会感觉很好,但是我真的不确定我更喜欢哪一个。在返回到最短的表单之前,我循环了所有这些表单。我远不是粉丝,而是想在这里使用它。我也同样受到诱惑。还考虑了if代码>。如果不是因为我们捕获变量的事实,当前的设置会感觉很好,但是我真的不确定我更喜欢哪一个。在回到最短的表格之前,我把它们都循环了一遍。