如果分配后

时间:2015-03-03 13:09:59

标签: perl if-statement

有人能告诉我perl中该行应该做什么:

$result{$key} .= ";" if (exists($result{$key}));

看起来它添加了“;”在密钥结束时,它已经存在,是真的吗? 是否与在分配之前加上“if”语句不同?

5 个答案:

答案 0 :(得分:5)

Perl允许您在之前或之后执行条件语句。

这是为了让你做以下事情:

return unless $configured;
exit if $bored;

print "Debug statement\n" if $debug; 

while ( <STDIN> ) {
    print if m/text/; 
}

所以是的,你是对的 - 这是一个有条件的追加,如果密钥存在,它将在的末尾加上一个分号。 (如评论中所述 - 它 NOT 更改密钥)

与以下内容没有什么不同:

if ( exists ( $result{$key} ) ) {
    $result{$key} .= ';';
}

通常,这是您使用的样式和可维护性问题。我通常建议避免它,因为通常会使事情变得不那么清楚。 (但并非总是如此 - 请参阅上面的几个例子)。

答案 1 :(得分:2)

1)有人能告诉我perl中该行应该做什么:

$result{$key} .= ";" if (exists($result{$key}));

答案: 上面的表达式可以理解为

if ( exists ( $result{$key} ) ) {   
    $result{$key} .= ';';
}

说明: if条件检查是否存在从哈希结果(%result)获得的值,其中键为$key,如果该值存在,则将分号附加到值的末尾。

2)看起来它添加了“;”在密钥结束时,它已经存在,是真的吗?

不,当值(值)存在时,分号将被添加到值的末尾而不是键的末尾,因为键的值是从散列通过 $ hashName {$的keyName}

示例:

C:\Users\kvivek>perl

my %fruit_color = (
    apple  => "red",
    banana => "yellow",
);

print $fruit_color{"apple"};
print "\n";
__END__
red

C:\Users\kvivek>

3)在分配之前是否与“if”语句不同?

不,这并没有什么不同,而是写作的另一种方式。

答案 2 :(得分:1)

正如你所说的那样。这意味着:

  

如果哈希%result的元素包含键$key,请将;附加到元素的值。

,因为

$result{$key} .= ";" if (exists($result{$key}));

只是另一种写作方式

if ((exists($result{$key}))) {
    $result{$key} .= ";";
}

答案 3 :(得分:0)

$result{$key} .= ";" if (exists($result{$key}));

if (exists($result{$key})) {
    $result{$key} .= ";";
}

做同样的事情。有时您可能更喜欢一个而不是另一个以提高可读性。

答案 4 :(得分:0)

$result{$key} .= ";" if (exists($result{$key}));

可以写成:

if (exists($result{$key}))
{
    $result{$key} .= ';';
}

没有区别。