您可以规范化查询。
print URI::eq(
q[http://a.a/?a=1&z=2], # a before z
q[http://a.a/?z=2&a=1] # z before a
);
[我建议将查询参数键作为列表获取(例如,使用URI :: QueryParam),对其进行排序并进行比较(可以使用Data :: Compare)。
如果它们相同,则必须比较每个键的值。
请记住,这不一定是琐碎的,值可以是JSON,您必须先对其进行解码或确保其规范,因此直截了当的'eq'可能会导致假阴性。
具有解码的JSON,您将最终得到一个相当任意的数据结构(至少可序列化)。现在,eq可能足以满足您的目的,也可能不能满足您的需要(一个空字符串等于无值吗?0等于0.0?等)。
您的示例似乎表明您没有考虑这一点,因此也许您不需要它,这将使事情变得非常简单:只需'eq'-比较所有值。或者您低估了这个问题,在这种情况下,您可能想问另一个问题或发布其他信息。
我个人不知道执行此操作的模块,但是很高兴得知有一个模块!