我正在从目录中读取,我正在搜索文件名和扩展名。接受的唯一扩展名为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
语句。
您有什么建议来简化该代码段吗?
答案 0 :(得分:3)
您可以使用
消灭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;
答案 1 :(得分:2)
在mpapec solution的基础上,我更喜欢行开头的控制流功能。
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;
}
}