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

时间:2011-06-16 14:40:02

标签: perl cgi mason

简介

  • 我尝试在我的Ubuntu桌面上设置mason。
  • 这是一个非常简单的设置,但阅读后我仍然有问题 masonbook.com的一部分& mansonhq.com
  • 我希望有人可以给我一个提示。请参阅下面的详细信息。

本地服务器

  • Ubuntu 11.04桌面
  • Mason 1.44(随Ubuntu一起推出)
  • 新手到perl / mason

文件

  • mason.seedy2 - 这是一个cgi脚本。基本上,我设置了一个全局变量 - > $用户。我想在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 :(得分:2)

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

答案 1 :(得分:0)

  1. print%user是一个错字。它应该是$ user。

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

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