催化剂应用范围的变量

src*_*ulo 2 perl global-variables catalyst

我希望能够在我的Catalyst应用程序中定义一个应用程序范围的(全局)变量,以便我可以在我所在的任何控制器中访问它.这样做的目的是我不会重复我的应用程序周围的值大部分都没有改变.目前我正在定义变量,my_app.pm如下所示:

our $GLOBAL_VAR = 'value';
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器中,我尝试访问变量就像我将子程序一样:

my_app::$GLOBAL_VAR
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.有谁知道这样做的最佳方法,或者在Catalyst中实现这一目标的更好方法?谢谢!

小智 5

在这里访问这样的全局变量是正确的语法:

say $my_app::GLOBAL_VAR;
Run Code Online (Sandbox Code Playgroud)


RET*_*RET 5

我可以看到这已经被问及并得到了解答,但还有其他方法可以实现这个问题的目标.

就个人而言,我喜欢把这些东西放到主程序中:

=== my_app.pm ===

__PACKAGE__->config->{GLOBAL_VAR} = 'value';


=== a nearby controller ===

if($c->config->{GLOBAL_VAR} eq 'value'){ 
    # etc
}
Run Code Online (Sandbox Code Playgroud)

请注意,这两种方法都不可变,当您说"大多数情况下永远不会更改"时,您需要在具有多个持久进程的Web服务器环境中非常小心.以编程方式更改此类值可能会影响该子项处理的后续请求,并且不会影响其他子项.当然,您可能只是意味着"开发人员可能会不时更改此参数".

希望这对某人有用.