'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"语句有什么不同吗?
不是,不是不同,而是另一种写法。
下面一行在 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"语句有什么不同吗?
不是,不是不同,而是另一种写法。