我的任务是纠正一大块Perl代码中的错误并且有一些问题(因为我是Perl的新手)。
我的第一个问题是感叹号是做什么的?
if (!$superceded{returned->{$field}}) {
$found = 0;
foreach (blahblahblah)
我的第二个问题是,如果你有一个变量$ supercede并且哈希%取代并且你写了
,这意味着什么 (keys %$superceded)
最后我已经阅读了接下来的两篇文章,但我仍然不确定它们是如何工作的。设置一个等于shift的变量以及如何使用" last;"。
感谢您提供任何帮助和建议。
答案 0 :(得分:2)
!
是逻辑否定,这意味着如果$cond
为真,!$cond
将为假。您可以从Truth and Falsehood了解有关perlsyn
的更多信息。
如果$hashref
是哈希引用,则%$hashref
是该引用所引用的哈希。例如,
my %hash = ( key1 => "val1", key2 => "val2" );
my $hashref = \%hash; # create a hash reference
while (my ($key, $val) = each %$hashref) {
# do something
}
哦,你也可以写这样的东西
my $hash = \%hash;
对于人类读者来说有点混乱,但Perl会毫无疑问地接受它。对于Perl,$hash
和%hash
是两个完全不同的变量,可能完全不相关。
您可以从perlref
了解有关参考的更多信息。 @$arrayref
类似,但在这种情况下$arrayref
是数组引用,可以由$arrayref = \@array;
创建。
将变量设置为等于
你的意思是这样的:
my $val = shift;
在这种情况下,这意味着my $val = shift @_;
,它将删除@_
的第一个元素并将其分配给$val
。有关详细信息,请参阅perldoc -f shift
。
如何使用" last;"
如果您想提前完成循环,可以使用last
。例如,
foreach my $i (1..100) {
print "$i\n";
}
将打印1到100,这个
foreach my $i (1..100) {
print "$i\n";
last if $i == 5;
}
仅打印1到5.有关详细信息,请参阅perlsyn
。