当方、perl初心者です。よろしくお願いします。
現在perlの勉強中で、perlで書かれたcgiスクリプトを読んでいるのですが、
下記のスクリプトの動作?が理解できないので、ご助言頂きたいです。
■ COMMON.pm
perl
1## COMMON.pm 2 3use CGI 4 5sub useCGI{ 6 my($self) = @_; 7 8 return($self->{'query'},$self->{'form'}) 9}
■ contents.cgi
perl
1# content.cgi 2 3use COMMON.pm 4 5$common = new COMMON; 6($query,$form) = $common->useCGI; 7 8&init(); 9 10sub init{ 11 print "パラメーターが不正です。" unless($query->{'uid'}[0] =~ /\w_\w/); 12}
■ 動作について
Webからcontent.cgiを下記のようにuidという引数を持たせて呼び出しています。
http://foo.bar.com/content.cgi?uid=tarou_yamada
個人的には、引数であるuidを$queryに配列として持たせて、
その値が、_(アンダーバー)を間に挟んだ文字列でなければ、
エラーメッセージを表示刷るものだと理解しています。
☆ 質問したいこと
・ 質問1
まず。contents.cgiで
($query,$form) = $common->useCGI;
とした時に、何が起こっているのかが知りたいです。
$queryには引数?
$formには何が入っているのかわからない状態です。
・質問2
print "パラメーターが不正です。" unless($query->{'uid'}[0] =~ /\w_\w/);
この一行の処理が知りたいです。
上述したように、uidの値で判定しているのだと思っているのですが、
この認識で良いのでしょうか?
お手すきの方いらっしゃいましたら、
よろしくお願いします。
■ 2015/11/11追記
すみません、一度解決済みにしたのですが、
プログラムの間違いに気づいたので、追記します。
useCGIが違うものを見ていました。
正しくは、以下のとおりです。
■ COMMON.pm
perl
1# COMMON.pm 2 3use CGI; 4 5sub useCGI{ 6 my $query; 7 if($ENV{'REQUEST_METHOD'} eq 'POST' and $ENV{'CONTENT_TYPE'}!~ /^multipart\/form-data/){ 8 my $form_data; 9 read(STDIN,$form_data,$ENV{'CONTENT_LENGTH'}); 10 $query=new CGI($form_data); 11 }else{ 12 $query=new CGI; 13 } 14 return($query,$form); 15} 16
追加質問1
上記のCOMMON.pmを使った場合、
$queryにはどのような値が格納されるのでしょうか?
(http://foo.var.com/contents.php?uid=tarou_yamagaの場合)
また、
$query->{'uid'}[0]
には、どのような値が入るのでしょうか?
というか、受け取った引数を、ハッシュとして持っているということ?
すみません、わからないことだらけで申し訳ないのですが、
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/10 10:54
2015/11/10 12:29
2015/11/11 03:04
2015/11/11 03:13 編集
2015/11/11 05:53
2015/11/11 06:54
2015/11/11 07:12
2015/11/12 12:13
2015/11/12 12:16