'if' 分配后

'if' after assignment

下面一行在 Perl 中应该做什么?

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

好像加了“;”在密钥已经存在时的末尾。是真的吗?

这与在赋值之前放置“if”语句有什么不同吗?

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

这是为了让您可以执行以下操作:

return unless $configured;
exit if $bored;

print "Debug statement\n" if $debug;

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

所以是的,你是对的 - 这是一个条件附加,如果键存在,它会在 的末尾添加一个分号。 (如评论中所述 - 它 不会 更改密钥。)

与以下内容没有任何不同:

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

一般来说,这是关于您使用的风格和可维护性的问题。我 generally 建议避免使用它,因为它 generally 让事情变得不那么清晰。 (但并非总是如此 - 请参阅上面的几个示例。)

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

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

做同样的事情。有时您可能更喜欢其中一种以获得更好的可读性。

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

可以写成:

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

没有任何区别。

正如你所说。意思是:

If the hash %result has an element with key $key, append ; to the element's value.

因为

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

只是另一种写法

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

1) 谁能告诉我这一行在 perl 中应该做什么:

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

回答: 上面的表达式可以读作

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

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

2) 好像加了“;”在键的末尾,当它已经存在时,是真的吗?

NO,分号将被添加到值的末尾而不是键的末尾,当它(值)存在时,因为键的值是从哈希中获得的 $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"语句有什么不同吗?

不是,不是不同,而是另一种写法。