perl的初学者问题

时间:2014-04-19 09:40:03

标签: arrays perl variables hash

我的任务是纠正一大块Perl代码中的错误并且有一些问题(因为我是Perl的新手)。

我的第一个问题是感叹号是做什么的?

if (!$superceded{returned->{$field}}) {
          $found = 0;
          foreach (blahblahblah)

我的第二个问题是,如果你有一个变量$ supercede并且哈希%取代并且你写了

,这意味着什么
  (keys %$superceded) 

最后我已经阅读了接下来的两篇文章,但我仍然不确定它们是如何工作的。设置一个等于shift的变量以及如何使用" last;"。

感谢您提供任何帮助和建议。

1 个答案:

答案 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