【发布时间】:2019-02-05 04:50:27
【问题描述】:
使用以下代码,我得到了截然不同的结果。
$val{"ENOTE"} = 05;
$val{"WATCH"} = 10;
my %sortFunc = ();
my $sortFunc = sub {
my ($va, $vb);
$va = $val{$$a{"etype"} . ":" . $$a{"emsg"}} // $val{$$a{"etype"}};
$vb = $val{$$b{"etype"} . ":" . $$b{"emsg"}} // $val{$$b{"etype"}};
# printf("$$a{etype} gets $va\n");
$$a{"year"} <=> $$b{"year"}
|| $$a{"month"} <=> $$b{"month"}
|| $$a{"day"} <=> $$b{"day"}
|| $$a{"sym"} cmp $$b{"sym"}
|| $va <=> $vb;
};
$sortFunc{"date"} = sub {
my ($va, $vb);
$va = $val{$$a{"etype"} . ":" . $$a{"emsg"}} // $val{$$a{"etype"}};
$vb = $val{$$b{"etype"} . ":" . $$b{"emsg"}} // $val{$$b{"etype"}};
# printf("$$a{etype} gets $va\n");
$$a{"year"} <=> $$b{"year"}
|| $$a{"month"} <=> $$b{"month"}
|| $$a{"day"} <=> $$b{"day"}
|| $$a{"sym"} cmp $$b{"sym"}
|| $va <=> $vb;
};
当我打电话给他们时,我得到了截然不同的结果。
@newsortrec = sort $sortFunc (@$rec);
@newsortrec = sort {$sortFunc{"date"}} (@$rec);
对$sortFunc 的调用按我的预期工作,并且我已经验证了它的输出。 {$sortFunc{"date"}} 的输出真的很奇怪。如果它获得了错误的数据或运行了错误的代码,它不会像您期望的那样胡言乱语。它只是按错误的顺序排序。它发生了变化,并且被“排序”了,但是以一种非常奇怪的方式。
神秘的$a 和$b 有什么让我伤心的事吗?
他们(愚蠢地)被命名为$sortFunc这一事实不应该是一个问题,不是吗?至少就 perl 而言。
$a 和 $b 的范围规则有什么不同吗?
我已经diffed 了代码,所以我知道它是一样的。
任何提示/线索?我正在尝试将代码移动到哈希中(它运行的地方......奇怪)。
谢谢。
-埃里克
【问题讨论】:
-
我留下了一段代码。
$va和$vb是数字。$val{"ENOTE"} = 05;,例如。对困惑感到抱歉。 -E