Perl单行习惯语法

时间:2015-05-19 18:32:23

标签: perl

在perl中:

if (!$var) { $var = 24 }

和:

if (!$var) { $var = 24; }

是正确的,当我只期望第二个工作时。

哪一个是最习惯的语法?

4 个答案:

答案 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)

来自perldoc perlsyn

  

每个简单的陈述必须以分号结束,   除非它是块中的最终语句,在这种情况下分号是可选的。   但如果块占用多行,则无论如何都要加分号,   因为你最终可能会添加另一行。

我更喜欢一直添加分号。