Perl:if中的类似条件。如何使它变短&;更好?
这太长了:Perl:if中的类似条件。如何使它变短&;更好?,perl,Perl,这太长了: if ( $self->{status} == 1 || $self->{status} == 2 || $self->{status} == 3 ){
if ( $self->{status} == 1 ||
$self->{status} == 2 ||
$self->{status} == 3
){
$self->status(4);
} else {
croak "only 1,2 and 3 change to 4";
}
您将如何使它变得更漂亮和更短?可能使用智能匹配操作符:
if ( $self->{status} ~~ [1,2,3] ) {
$self->{status} ~~ [1,2,3] ? $self->status(4) : croak "only 1,2 and 3 change to 4";
可能通过智能匹配操作员:
if ( $self->{status} ~~ [1,2,3] ) {
$self->{status} ~~ [1,2,3] ? $self->status(4) : croak "only 1,2 and 3 change to 4";
如果您的perl足够新,可以使用smart match:
$self->{status} ~~ (1,2,3) and $self->status(4) or croak "...";
如果您的perl足够新,可以使用smart match:
$self->{status} ~~ (1,2,3) and $self->status(4) or croak "...";
您可以使用三元运算符:
if ( $self->{status} ~~ [1,2,3] ) {
$self->{status} ~~ [1,2,3] ? $self->status(4) : croak "only 1,2 and 3 change to 4";
您可以使用三元运算符:
if ( $self->{status} ~~ [1,2,3] ) {
$self->{status} ~~ [1,2,3] ? $self->status(4) : croak "only 1,2 and 3 change to 4";
不知道是否更好,但是
foreach my $x (1,2,3,4,5){
if (map{ $x == $_ ? 1 : () }(1,2,3) ){
print "is 1,2, or 3\n";
} else {
printf "is %s\n", $x;
}
}
不知道是否更好,但是
foreach my $x (1,2,3,4,5){
if (map{ $x == $_ ? 1 : () }(1,2,3) ){
print "is 1,2, or 3\n";
} else {
printf "is %s\n", $x;
}
}
如果状态始终为正整数,则可以:
if($self->{status} < 4)
{
$self->status(4);
} else {
croak "only 1,2 and 3 change to 4";
}
if($self->{status}<4)
{
$self->status(4);
}否则{
“只有1、2和3变为4”;
}
如果状态始终为正整数,您可以:
if($self->{status} < 4)
{
$self->status(4);
} else {
croak "only 1,2 and 3 change to 4";
}
if($self->{status}<4)
{
$self->status(4);
}否则{
“只有1、2和3变为4”;
}
可能不是世界上最有效的方法,但不依赖于实验性功能或循环:
if($self->{'status'} =~ m/^(1|2|3)$/) { ... }
可能不是世界上最有效的方法,但不依赖于实验特性或循环:
if($self->{'status'} =~ m/^(1|2|3)$/) { ... }
“或”是什么意思?这将检查状态是1、2还是3(不能同时为所有,是吗)?不幸的是,smartmatch在perl 5.18.0中被标记为实验性的。它甚至可能在以后的perl版本中消失。看到条目了吗?@SlavenRezic在Perl 5.12中引入隐式smartmatch之后,它现在是实验性的了?@DavidW:实际上它是在5.10.0中引入的。5.10中添加的其他内容将继续:CPANPLUS已被标记为不推荐使用,并将在下一个主要版本中删除,Module::Build是下一个不推荐使用的候选。您所说的“或”是什么意思?这将检查状态是1、2还是3(不能同时为所有,是吗)?不幸的是,smartmatch在perl 5.18.0中被标记为实验性的。它甚至可能在以后的perl版本中消失。看到条目了吗?@SlavenRezic在Perl 5.12中引入隐式smartmatch之后,它现在是实验性的了?@DavidW:实际上它是在5.10.0中引入的。5.10中添加的其他内容将继续:CPANPLUS已被标记为已弃用,并将在下一个主要版本中删除,Module::Build是下一个弃用候选。小心--。小心--。这是对map的错误使用,最好使用
grep
,例如if(grep{$x=$}(1,2,3))
。这仍然不是我会使用的方法。非常正确。在这两方面。我在Python中工作的时间太长了。。8) 这是对map的错误使用,最好使用grep
,例如if(grep{$x=$}(1,2,3))
。这仍然不是我会使用的方法。非常正确。在这两方面。我在Python中工作的时间太长了。。8)