2014-07-05 78 views
2

我有一段代碼使用CGI::Application作爲它的基礎,但是某些功能無法正常工作。CGI ::應用程序參數()未設置

當我嘗試通過$Template->param()設置某些東西時,它似乎沒有設置。 $Template等於$self->load_tmpl($template);

而且這塊我要救的是:

$Template->param('symbols' => \%a_hash_ref); 

我知道\%a_hash_ref包含預期值。它有一個類似的形式:

{'symbol' => 'DTX'},{'symbol' => 'QFLD'} 

而且,如果我做

$Template->param('Hey!xD' => 'Something'); 

它不保存,但

$Template->param($Pagination); 

確實,這裏$Pagination也是hash_ref。

我知道所有的值都是他們應該是的,我也嘗試了一些簡單的字符串,這應該工作,但他們沒有設置。我知道,當我跑這是因爲:

my @params = $Template->param(); 
die Dumper \@params; 

它輸出它應該已經建立了所有的變量,但所預計的(包括'Hey!xD'字符串)失蹤。我也知道它實際上運行的代碼,因爲這個模具翻斗車是我嘗試設置值後。

模板文件包含這段代碼:

$(文件)。就緒(函數(){mainFunction( '[%符號%]'); });

任何幫助,將不勝感激。

編輯:

這就是被給予PARAM:

[ { '日期'=> '2006-07-05', 'avg_gain'=>是undef , 'bollinger_mid'=> '32 0.80000' , '符號'=> 'BBQ' },{ '日期'=> '2006-04-04', 'avg_gain'=>是undef, 「bollinger_mid '=> '34 .55656', '符號'=> 'AAPL' } ... ]

回答

2

這實際上是一個HTML ::模板的問題,這CGI ::應用程序使用默認的模板。

您是否在load_tmpl調用中將die_on_bad_params設置爲0?如果您嘗試設置一個參數,該參數在加載的模板中不存在(默認爲docs here),那麼HTML :: Template應該默認爲死。當die_on_bad_params被禁用時,你會得到你正在描述的行爲,其中未知模板參數被忽略和丟棄。

此外,according to the docs,TMPL_LOOP將hashref的arrayref作爲其參數param。也許這將有助於通過您的「符號」參數是這樣的:

my $symbols = [{ symbol => 'DTX' },{ symbol => 'QFLD' }]; 
$Template->param(symbols => $symbols); 

如果您發佈的樣本模板和小腳本,顯示您可以更輕鬆地告訴某些錯誤。

+0

是的,我把它設置爲0!謝謝!如果在嘗試設置模板中尚不存在的參數時它會死掉,那麼我該如何設置該參數呢? 我閱讀文檔,我不明白爲什麼$ Template-> param('symbols')不存在。在我的模板中,我有這個: fetchQuoteData('[%symbol%]'); < /TMPL_LOOP> – Sismetic

+0

嗨,我從文檔中添加了一些'TMPL_LOOP'信息,可能有所幫助。 – wes

+0

當然,非常感謝您的幫助。我顯然發送了hashref的arrayref。我將代碼編輯爲 – Sismetic