【发布时间】:2018-03-01 13:50:25
【问题描述】:
我正在尝试创建一个字符串的 SHA-256 哈希值
Mason
按照 Stack Overflow 问题的答案
SHA256 digest in perl
并使用
Digest::SHA模块
这些是包含该代码的文件abc.mi 的内容:
use Digest::SHA qw(sha256_hex);
<%init>
my $message = 'random content';
my $encryptedMsg = sha256_hex($message);
</%init>
但它抛出以下错误:
Undefined subroutine &Safe::Root0::HTML::Mason::Commands::sha256_hex called
知道为什么即使我在文件本身的开头定义了sha256_hex,它仍将其视为未定义?
这与这是带有扩展名.mi 的梅森代码这一事实有关吗?
========== 编辑 ==========
在浏览了针对此问题发布的答案后,这是我的查询的解决方案。
<%init>
my $message = 'random content';
my $encryptedMsg = Digest::SHA::sha256_hex($message);
</%init>
【问题讨论】:
-
这是评论而不是答案,因为我在猜测。但这是一个非常有根据的猜测,我确信 Mason 标记
<%tag> ... </%tag>之外的任何内容都会被逐字复制,就像 PHP 一样。我不确定是否可以从 Mason 模板中use模块,但即使它有效,它似乎在各方面都是错误的。尝试将use Digest::SHA qw(sha256_hex)移动到您的 Perl 代码中。 -
@Borodin:你的假设都是正确的。而且您可以在 Mason 模板中使用 Perl 模块,出于所有显而易见的原因,这是一个糟糕的主意。但这似乎是梅森系统的编写方式。我目前正在开发一个庞大的 Mason 代码库,该代码库为英国最著名的网站之一提供支持。