【问题标题】:Perl references not returning correct valuesPerl 引用没有返回正确的值
【发布时间】:2011-02-25 23:23:42
【问题描述】:

这是我第一次在这里提出问题,如果我没有正确遵守任何约定,敬请见谅。

我在一些 Perl 代码中遇到了一个错误,该错误基本上丢失了 URL 中第一个名称-值对之后的所有参数,解决方案是在 URL 上使用 URI::Escape 函数。

在此更改之后,我决定将执行此操作的代码移动到 Perl 模块 (Utils.pm),以便将来的任何更改只需要在此文件中进行一次,而不必更新使用它的每个文件。

我似乎遇到的问题是 user、passwd 和 priv 变量似乎没有返回正确的值 - 系统仍然允许您登录,但它无法识别您的姓名或您拥有的权限.

下面是我认为与问题相关的代码的粘贴箱链接。

我相信这与参考有关,但我所做的任何更改都会破坏页面!

如果有人有任何想法,我将不胜感激。

http://pastebin.com/tqGfGutW

【问题讨论】:

  • 我会给你一些不请自来的建议,避免使用模块名称 Utils(以及 Tools)。命名为这个的模块通常会吸引不相关的代码,一旦代码在那里,它就永远不会移动到它所属的地方。如果您在需要添加第二个时向 Utils 模块添加一个日期格式化函数,您将在其中添加它。与第三或第六相同。从长远来看,最好创建 10 个窄范围模块,每个模块有一个功能,而不是一个通用模块有 10 个功能。

标签: perl reference


【解决方案1】:

我通过尝试几件事设法解决了这个问题。

在 Utils.pm 中,我只是去掉了反斜杠,这样它就变成了:

$res = CGI_ats::GetUserandPasswd($user, $passwd, $privs);

由于在此之前已经引用了几行,我认为这是有道理的 不必再次引用它们。

【讨论】:

  • 好吧,再次引用它们是有意义的,但你会得到对引用的引用。
  • PERL 中的引用有时会变得棘手。随着您在这门语言方面获得更多经验,它对您来说几乎是自然而然的。
猜你喜欢
  • 2014-11-26
  • 2019-03-21
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多