CGI.pmを使って、CGIを使っていたが、
GETとPOSTが混在した場合の処理については、
注意が必要だったので、
メモしておきます。

パラメータ
test.cgi?key1=val1とPOSTでkey2=val2が来た場合。

  1.  
  2. use CGI;
  3.  
  4. my $cgi = new CGI;
  5. my $val1;
  6. my $val2;
  7.  
  8. $val1 = $cgi->param(‘key1′);
  9. $val2 = $cgi->param(‘key2′);
  10.  
  11. #↑これだと、val2しか取れない
  12.  
  13. $val1 = $cgi->url_param(‘key1′);
  14. $val2 = $cgi->param(‘key2′);
  15.  
  16. #↑これで取得可能
  17.  
  18.  

GETとPOSTが両方とも存在する場合は、POSTが優先される。
GETの値を取りたい場合は、url_paramで取得可能。

実際、どちらで来るかわからない場合は、こんな風に書くのかなぁ
#同じキー値が届いた場合は、POSTを優先させる

  1.  
  2. use CGI;
  3.  
  4. use $cgi = new CGI;
  5.  
  6. my $val1;
  7. my $val2;
  8.  
  9. $val1 = $cgi->param(‘key1′);
  10. $val2 = $cgi->param(‘key2′);
  11.  
  12. $val1 = $cgi->url_param(‘key1′) if( ! defined($val1) );
  13. $val2 = $cgi->url_param(‘key2′) if( ! defined($val2) );
  14.  
  15.  

Leave a Reply