2
A
回答
4
到這裏訪問這樣一個全局變量是正確的語法:
say $my_app::GLOBAL_VAR;
4
我可以看到這個已經被問和回答,但也有其他方法來實現這一問題的目的。
就個人而言,我喜歡把這些東西放到主程序這樣的:
=== my_app.pm ===
__PACKAGE__->config->{GLOBAL_VAR} = 'value';
=== a nearby controller ===
if($c->config->{GLOBAL_VAR} eq 'value'){
# etc
}
要知道,無論方法是不變的,當你說:「在大多數情況下不會改變」,你需要在具有多個持久性進程的Web服務器環境中非常小心。以編程方式更改此類值可影響該子級處理的後續請求,並且不會影響其他子級。當然,你可能只是指「開發者可能不時地改變這個參數」。
希望對某人有用。
2
我喜歡通過Catalyst插件管理任何類型的全局狀態。理由:
- 插件允許您通過訪問器方法獲取/設置數據。
- 這可以避免使用$ package :: variables的一些安全問題
- 這使用全局狀態從存儲位置的細節中解耦代碼。
- 插件爲放置可能與該全局狀態有關的其他功能提供了一個方便的地方。
- 催化劑插件實現起來非常容易。
這裏是一個示例實現,建立在RET的建議使用包 - >配置:
package YourApp::Catalyst::Plugin::MyGlobalState;
sub global_state {
my $c = shift;
if(@_) { # If passed an argument, set.
$c->config->{global_state} = shift;
}
return $c->config->{global_state};
}
1;
在主應用
然後:
package YourApp;
use Catalyst (
...
'+YourApp::Catalyst::Plugin::GlobalState'
);
控制器中的某處
則:
sub my_action {
my $c = shift;
my $global_state = $c->global_state;
$c->global_state('new state');
}
+0
謝謝!這是一個很好的解決方案。我會牢記在心:) – srchulo 2016-11-12 23:44:05
相關問題
- 1. 使用催化劑
- 2. 下催化劑MVC
- 3. 不能在Perl催化劑應用
- 4. Perl催化劑應用程序修改
- 5. 催化劑優化階段
- 6. 企業催化劑和jquery雲變焦
- 7. 業務催化劑響應目錄表
- 8. 爲了研究催化劑
- 9. 催化劑:Log4perl和Apache
- 10. 業務催化劑分類
- 11. Minify CSS業務催化劑
- 12. nginx和催化劑配置
- 13. 將催化劑鏈傳遞給催化劑鏈w/$ c->訪問
- 14. 使用催化劑::型號:: MenuGrinder
- 15. 使用催化劑的動態菜單
- 16. 催化劑模型緩存dbix調用
- 17. 在催化劑SOAP :: Lite客戶端讓我所有的催化劑的應用程序訪問或超時
- 18. 試圖本地化催化劑模板
- 19. Perl催化劑:如何重新使用應用程序
- 20. 如何抑制來自催化劑
- 21. 問題與催化劑中的Makefile.PL
- 22. 催化劑控制器問題
- 23. Adobe業務催化劑URL處理
- 24. saferpay整合企業催化劑
- 25. 催化劑鏈式路由「循環」
- 26. 催化劑請求對象JSON輸入
- 27. 調試+斷點與Trigger.io催化劑
- 28. 催化劑HTML :: formhandler通形式價值
- 29. Perl催化劑控制器鏈
- 30. 催化劑和梅森的區別
嘿,th儘管這已經得到了解答,但您仍然可以提出建議。通過「絕大多數情況下永不改變」,我的意思是開發人員會不時地改變它,在我的部分的措辭選擇不當:)你認爲使用'__PACKAGE __-> config'比只聲明它們更好常規變量,還是僅僅是個人偏好?它似乎更多的催化劑-Y :) – srchulo 2013-03-07 04:16:33
我總是使用'__PACKAGE __-> config'聲明這些'靜態'變量。特別是如果有問題的變量是你的應用程序的配置設置!這可能是個人偏好,但是使用perl全局變量總是感覺*對我來說就像是黑客,並且違背了封裝的一般原則。 – RET 2013-03-07 04:51:39