我正在尝试构建一个if具有多个条件的语句,而不是太冗长.目前我有:
my $string = "Hamburger";
my @string_as_array = ( $string =~ m/.../g );
my $x=(scalar @string_as_array);
for(my $i=0; $i<$x; $i++) {
if ($string_as_array[$i] eq "Ham" || $string_as_array[$i] eq "bur") {
print "CHEESE";
}
elsif ($string_as_array[$i] eq "ger") {
print "WICH";
}
else {
print $string_as_array[$i];
}
}
print "\n";
Run Code Online (Sandbox Code Playgroud)
理想情况下,if如果有可能,我会在第一个声明中喜欢这样的内容:
my $string = "Hamburger";
my @string_as_array = ( $string =~ m/.../g );
my $x=(scalar @string_as_array);
for(my $i=0; $i<$x; $i++) {
if ($string_as_array[$i] eq "Ham" || "bur") {
print "CHEESE";
}
elsif ($string_as_array[$i] eq "ger") {
print "WICH";
}
else {
print $string_as_array[$i];
}
}
print "\n";
Run Code Online (Sandbox Code Playgroud)
如果它是可能的.
my %map = (
'Ham' => 'CHEESE',
'bur' => 'CHEESE',
'ger' => 'WICH',
);
say $string =~ s{(...)}{ $map{$1} // $1 }serg;
Run Code Online (Sandbox Code Playgroud)
其他事情更需要简化!
象征汤
my $x=(scalar @string_as_array);
for (my $i=0; $i<$x; $i++)
Run Code Online (Sandbox Code Playgroud)
简化为
for (my $i=0; $i<@string_as_array; $i++)
Run Code Online (Sandbox Code Playgroud)
这简化为
for my $i (0 .. $#string_as_array)
Run Code Online (Sandbox Code Playgroud)
但是你实际上并不需要索引(只是元素),所以用它替换它
for my $part (@string_as_array)
Run Code Online (Sandbox Code Playgroud)
甚至
for my $part ( $string =~ /.../sg )
Run Code Online (Sandbox Code Playgroud)
这已经给了我们更清洁的东西:
for my $part ( $string =~ /.../sg ) {
if ($part eq "Ham" || $part eq "bur") {
print "CHEESE";
}
elsif ($part eq "ger") {
print "WICH";
}
else {
print $part;
}
}
Run Code Online (Sandbox Code Playgroud)
那就是说,我们现在要求哈希查找.
my %map = (
'Ham' => 'CHEESE',
'bur' => 'CHEESE',
'ger' => 'WICH',
);
for my $part ( $string =~ /.../sg ) {
print $map{$part} // $part;
}
print("\n");
Run Code Online (Sandbox Code Playgroud)
$part是没有意义的,所以不妨通过切换到while循环来节省内存$1.
while ( $string =~ /(...)/sg ) {
print $map{$1} // $1;
}
print("\n");
Run Code Online (Sandbox Code Playgroud)
最后的转变:
say $string =~ s{(...)}{ $map{$1} // $1 }serg;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5186 次 |
| 最近记录: |