以下代码正是我想要的,但有些东西告诉我,空elsif
不是好习惯。目的是确保$type
为snap
或fs
,但只有$t
才会更改snap
。
my $t = "";
if ($type eq "snap") {
$t = "-t snapshot";
} elsif ($type eq "fs") {
} else {
fatalError("must either be snap or fs")
}
问题
我如何做同样的事情,但没有空elsif
?
答案 0 :(得分:5)
怎么样:
my $t = "";
if ($type eq "snap") {
$t = "-t snapshot";
} elsif ($type ne "fs") {
fatalError("must either be snap or fs")
}
答案 1 :(得分:4)
我会:
my $t;
if ($type eq 'snap') {
$t = '-t snapshot';
}
elsif ($type eq 'fs') {
$t = '';
}
else {
fatalError("must either be snap or fs");
}
答案 2 :(得分:3)
您实际上将两个单独的检查合并为一个:
$type
有效吗?$t
应该设置什么?我认为以下内容会更清楚,但会以两次检查相同的值为代价:
fatalError('must be either snap or fs') unless $type eq 'snap' or $type eq 'fs';
my $t;
$t = '-t snapshot' if $type eq 'snap';
(当然这假设您的函数fatalError
实际上导致程序死亡。)
您可以将第一部分概括为两个以上的有效选项,如下所示:
my %valid = map { $_ => 1 } qw(snap fs foo bar);
fatalError('must be one of: ' . join(', ', keys %valid)) unless exists $valid{$type};
答案 3 :(得分:1)
扭转你的状况,摆脱其他人。
} elsif ($type ne "fs") {
fatalError("must either be snap or fs")
}
答案 4 :(得分:1)
my $t =
($type eq "snap") ? "-t snapshot"
: ($type eq "fs") ? ""
: fatalError("must either be snap or fs");