在perl中:
if (!$var) { $var = 24 }
和:
if (!$var) { $var = 24; }
是正确的,当我只期望第二个工作时。
哪一个是最习惯的语法?
答案 0 :(得分:13)
首先,在包含或不包含分号的单行上if (!$var) { $var = 24; }
在Perl中不是惯用的。
正如您所注意到的,分号不是必需的,因为在Perl中,分号是语句分隔符,而不是语句终止符。
你的问题有一个单行'在标题中,但我无法弄清楚这与单线有什么关系。如果有理由使用完整的if condition block
语法,请不要将其放在一行上。代替:
if (!$var) {
$var = 24;
}
据推测,您正在使用该块,因为您可能会在其中添加其他语句。这将使你的差异更清晰。
另一方面,该语句仅用于设置$var
而在$var
为false或未定义时没有其他内容,那么您应该使用:
$var ||= 24;
超过其他方法,因为这是最明确的意图陈述。如果想法仅在未定义$var
时设置,则可以使用:
$var //= 24;
与5.10及更高版本。
答案 1 :(得分:7)
正如你所注意到的,两者都是正确的。你不需要用分号结束一个块中的最后一个语句,但这是很好的做法。
以下是一些重写if语句的方法:
$var = 24 if !$var;
$var = 24 unless $var;
$var ||= 24;
答案 2 :(得分:5)
根据我的经验,大多数人都包括分号,但在这种情况下,下列其中一种可能更为惯用:
$var = 24 if !$var;
$var = 24 unless $var;
$var ||= 24;
(有些人讨厌unless
。)
不多,但不少,在包含多行的列表中也包含一个尾随逗号。
my @foo = (
"abc def",
"ghi jkl",
"mno pqr",
);
这会减少添加到列表时更改的行数,并使其更容易实现。
答案 3 :(得分:3)
每个简单的陈述必须以分号结束, 除非它是块中的最终语句,在这种情况下分号是可选的。 但如果块占用多行,则无论如何都要加分号, 因为你最终可能会添加另一行。
我更喜欢一直添加分号。