有人能告诉我perl中该行应该做什么:
$result{$key} .= ";" if (exists($result{$key}));
看起来它添加了“;”在密钥结束时,它已经存在,是真的吗? 是否与在分配之前加上“if”语句不同?
答案 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} .= ';';
}
没有区别。