2016-07-05 9 views
1

Perlバージョン5.8.5を見える私が持っている:は、Perl CGIのバグのよう

my @dt = qw(1 0); 
my %dt = qw(1 single 0 multi); 
my $val = 0; 

$cgi->popup_menu({ 
    -name => "test", 
    -default => $val, 
    -values => \@dt, 
    -labels => \%dt, 
}) 

すべてが設定されることはありません「を選択」を除いて、ポップアップで正常に動作します。 したがって、常に最初のvalが選択されます。

私は変更を行い、通常は0、その後($val@dt、および%dt)すべての場合において2へのすべての機能を変更し、私は、HTMLタグに「選択」を取得した場合。

また、私はPerl 5.8.8ボックスにコードをコピーしました。それはのゼロで動作しますか?私はシステム管理者にPerlバージョンを5.8.5ボックスに適用させる必要がありますか?

+5

FYI、CGI.pmのHTML生成関数を使用しています([https://metacpan.org/pod/CGI#HTML-Generation-functions-should -no-longer-be-used)である。あなたは本当に代わりにテンプレートツールキットのようなテンプレートエンジンを使用する必要があります。また、Perl 5.8.5は*本当に古いです(2004年にリリースされました)。 5.24.0がリリースされました!多分あなたはこの設定に悩まされているかもしれませんが、何か選択肢があれば、あなたのツールセットをアップデートしてください! – ThisSuitIsBlackNot

答えて

5

CGIは、CPAN経由でperl自体から独立して更新できます。

関連する使用ステートメントとモジュールのバージョン、およびサンプルHTML出力を含めれば便利です。

更新:ご使用のバージョンのperlがCGI 3.05を使用しているようです(Module :: CoreListを参照)。 CGIの変更ログを調べると、これは既知のバグであることがわかります。

バージョン3.45、2009年8月14日 [バグフィックス] 3. 0がpopup_menu()にデフォルト値として使用することを許可します。これは3.37から始まった。 Haze、これを最初に報告してパッチを提供してくれた人、そしてバグがいつ導入されたのかを正確に指摘してくれたpfschillのおかげです。これに対する回帰テストも追加されました。 (RTは#37908)

P.S.(彼らは正しくバグの(再)導入を解剖していない可能性があります)むしろ別の@dtは単に[ sort keys %dt ]

+0

私はルート(会社の箱)を持っていないので、perlをインストールすることはできません。私の値はいつもソートされていませんが、素敵なチップが便利かもしれません...コードはウインドウボックスにありますので、ここにコピーすることはできませんでした...しかし、HTMLは、0のときに "選択された"中古。私は1996年以来Perlを使用していましたが、私はバグを見たと思っていました。しかし、この場合は私の唯一の論理的な結論です。私はこの問題が言及されているかどうかを調べるために "Perl build notes"を検索しましたが、検索でノートが出てこない..... – user3250422

+0

一般的です。私はコアモジュールをアップグレードするためにperlをアップグレードする必要はないことを指摘していました。より新しいローカルコピーをロードするためにフルパス名を 'require 'することができるので、ルートも必要ではありません。それを行うための多くの方法の中のただ一つ。 – belg4mit

+1

@ belg4mit:CGIはもはやコアモジュールではなくなりました。最新のPerlディストリビューションから廃止され、削除されました。 – Borodin

3

-valuesを設定しているあなたも正しいとすることができ、あなたはperl -MCGI -e 'print $CGI::VERSION, "\n"'農産物を何CGIモジュール

の古いバージョンを実行していますか?そして、v5.8.8システムでは?

私もPerlのv5.8.8がよく10歳以上ですが、あなたができるはずであるとしてあなたはおそらく、とにかくアップグレードの恩恵を受けるCGIのバージョン4.28と結果が正しいよう

<select name="test" > 
<option value="1">single</option> 
<option selected="selected" value="0">multi</option> 
</select> 

を実行していますより簡単な場合はCGIモジュールだけをアップグレードしてください。実際、このモジュールは廃止され、もはやコアモジュールではなくなり、Perl v5へのアップグレードになりました。24には、施設を取り戻すためにCGIをインストールする必要があります。

CGIの機能は、HTML生成と同じモジュール内に決して組み込まれるべきではありません。 )PSGI取って代わられていますが、あなたが見つけたバグだったCGIモジュールのバージョン3.4.5で修正されたことをHTML

belg4mit has identifiedを生成するために一緒に HTML::TinyCGI::Simpleまたは CGI::Minimalのような個別のモジュールを使用することを好みます最初にPerl v5.11.0の開発版の一部としてリリースされました。その後のPerlの最初のリリースはv5.12で、モジュールのバージョン3.4.8が含まれています

Perl v5.8.8のインストールでは問題が表示されないことがわかったので、CGIモジュールはPerlから独立してそのマシンでアップグレードされました

+0

皆さん、ありがとうございます。私はcgi.pmを更新するつもりです! – user3250422

+0

私を信頼してください。もしアップグレードがオプションだったら、常に最新のものに非常に近いでしょう。しかし、この会社では、Unixの管理者が私たちのために何かをするのは不可能です。これはJAVA/ORACLEビジネスであり、常に最新のものです。しかし、私たちが何かを求めたら、私たちは赤い踏み台の子供たちです... – user3250422

+0

それはあなたが書いたことです。「私たちのシステム管理者が5.8.5ボックスにPerlバージョンをバンプする必要がありますか?」*それが実現可能な解決策であると仮定した。私が言ったように、あなた自身のローカルマシンにCGIのコピーをインストールし、それを使ってテストすることを忘れないでください。 – Borodin

関連する問題