首页 文章

如何用Mason定义一个全局变量

提问于
浏览
1

简介

  • 我试图在我的Ubuntu桌面上设置mason .

  • 这是一个非常简单的设置,但在阅读了masonbook.com和mansonhq.com的部分后我仍然遇到了问题

  • 我希望有人可以给我一个提示 . 请参阅下面的详细信息 .

本地服务器

  • Ubuntu 11.04桌面

  • 梅森1.44(与Ubuntu合作)

  • 新手到perl / mason

档案

  • mason.seedy2 - 这是一个cgi脚本 . 基本上,我设置了一个全局变量 - > $ user . 我想在index1.html中使用它

  • index1.html - 简单的html文件

  • apache.conf - 我不确定我做得对

错误

1. type http://localhost:81/index1.html in browser

2.

error:      Error during compilation of /var/www/test/sj3/public_html/index1.html:
Global symbol "$user" requires explicit package name at /var/www/test/sj3/public_html/index1.html line 2.

context:    
1:      
2:      
3:      
4:      
code stack:     /usr/share/perl5/HTML/Mason/Interp.pm:450
/usr/share/perl5/HTML/Mason/Request.pm:249
/usr/share/perl5/HTML/Mason/Request.pm:212
/usr/share/perl5/HTML/Mason/ApacheHandler.pm:94
/usr/share/perl5/Class/Container.pm:275
/usr/share/perl5/Class/Container.pm:353
/usr/share/perl5/HTML/Mason/Interp.pm:348
/usr/share/perl5/HTML/Mason/ApacheHandler.pm:874
/usr/share/perl5/HTML/Mason/ApacheHandler.pm:828
(eval 34):8
-e:0

apache.conf

# Listen to other ports
Listen 81



    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/test/sj3/public_html                                             

    PerlSetVar  MasonCompRoot    /var/www/test/sj3/public_html/
    PerlSetVar  MasonDataDir     /var/www/test/sj3/mason/

    Action html-mason /cgi-bin/mason.speedy2
     
            SetHandler   perl-script
            PerlHandler  HTML::Mason::ApacheHandler

index1.html

print %user

mason.speedy2

#!/usr/bin/perl -w

use strict;
use HTML::Mason::CGIHandler;

{
    our($user, %session);
    $user = "bla";
}

my $h = HTML::Mason::CGIHandler->new
(
    data_dir  => "$ENV{DOCUMENT_ROOT}/../mason",
    allow_globals => [qw(%session $user)],
);

$h->handle_request;

2 回答

  • 0

    如果必须有site wide globals,则在apache处理程序中使用allow_globals声明它们,并在根级别autohandler中初始化它们 .

  • 2
    • print%user是一个错字 . 它应该是$ user .

    • daotoad的建议很好,但我需要一段时间才能更改现有代码

    • 前一个程序员有“/cgi-bin/mason.speedy2”包含所有全局变量和包,然后在/ apache.conf中嵌入/cgi-bin/mason.speedy2(即类似于在autohandler中声明它们) . 我的问题:/cgi-bin/mason.speedy2正在运行吗?如果它正在运行,为什么没有定义全局变量$ user?

相关问题