Perl一行习惯语法

Perl一行习惯语法,perl,Perl,在perl中,两者都是: if (!$var) { $var = 24 } 以及: 是正确的,当我期待只有第二个工作 哪一种是最惯用的语法?根据我的经验,大多数人都会使用分号,尽管在这种情况下,以下其中一种可能更惯用: $var = 24 if !$var; $var = 24 unless $var; $var ||= 24; (不过,有些人讨厌,除非。) 不是很多,但也有很多,在跨越多行的列表中还包括一个尾随逗号 my @foo = ( "abc def", "ghi jk

在perl中,两者都是:

if (!$var) { $var = 24 }
以及:

是正确的,当我期待只有第二个工作


哪一种是最惯用的语法?

根据我的经验,大多数人都会使用分号,尽管在这种情况下,以下其中一种可能更惯用:

$var = 24 if !$var;
$var = 24 unless $var;
$var ||= 24;
(不过,有些人讨厌
,除非
。)


不是很多,但也有很多,在跨越多行的列表中还包括一个尾随逗号

my @foo = (
   "abc def",
   "ghi jkl",
   "mno pqr",
);

这减少了添加到列表时更改的行数,并使添加更容易。

正如您所注意到的,这两种方法都是正确的。您不需要在块中的最后一条语句结尾使用分号,但这是一种很好的做法

以下是重写if语句的几种方法:

$var = 24 if !$var;
$var = 24 unless $var;
$var ||= 24;
首先,
if(!$var){$var=24;}
在带分号或不带分号的单行上不是Perl的惯用用法

正如您所注意到的,分号是不必要的,因为在Perl中,分号是语句分隔符,而不是语句终止符

你的问题标题中有“一句话”,但我不知道这和一句话有什么关系。如果有理由使用完整的
If条件块
语法,则不要将其放在一行中。相反:

if (!$var) {
    $var = 24;
}
您使用该块可能是因为您可能会在其中添加其他语句。这将使您的差异更干净

另一方面,该语句仅用于设置
$var
,当
$var
为false或未定义时,则应使用:

$var ||= 24;
因为这是最清晰的意图声明。如果只在未定义时设置
$var
,则可以使用:

 $var //= 24;
使用5.10及更高版本。

来自:

每个简单语句都必须以分号结尾, 除非它是块中的最终语句,否则分号是可选的。 但如果块占用多行,则无论如何都要加上分号, 因为您最终可能会添加另一行


我更喜欢总是添加分号。

/=
可能值得在perl 5.10中包含。我在CentOS 6上的perl 5.10上尝试了“/=”和“| |=”,这两种方法都可以正常工作。可能是红帽后端口?请注意| |和/=之间有一个微小的区别。对于$var等于0,$var | |=24将更改$var的值,而$var/=24将不会更改$var的值。
 $var //= 24;