タグ

ブックマーク / aimix.jp (3)

  • フォーム入力からファイルの書き出しまで | beginners CGI

    フォームからの送信で日語のような 2バイト文字を送信した場合、 %を含む意味不明な文字列になって送信されるのをご存知でしょうか? これはURLエンコードと言い、特殊記号や日語などの文字列も正しく 送信する為に行われており、実際に表示やファイルに書き出す場合、 これらを元に戻してやる必要があります。 例えばフォームから受け取ったデータが $formin という変数に入っていた場合は、受け取った後 の処理に次のソースを加えて下さい。 # + 記号を半角スペースに戻す $formin =~ tr/+/ /; #URLエンコードデータをデコードする $formin =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; URLエンコードされたデータで半角スペースは + 記号に、2バイト文字は %16進数値 といった 形にエンコードされています

  • ファイルに書き出す | beginners CGI

    ファイルを読み込んだり、書き込んだりする場合はファイルハンドルという名前を付けますが、 このファイルハンドルとは、どのファイルを読み書きするかを関連付けるものです。 書式 open (ファイルハンドル, "> ファイル名"); print ファイルハンドル 書き出す内容; close (ファイルハンドル); 下の例では 配列を test.txt というファイルに書き出しています。 #!/usr/local/bin/perl @aaa = ("佐藤\n","竹内\n","近藤\n"); open (OUT,"> test.txt"); print OUT @aaa; close (OUT); print "Content-type: text/html\n\n"; print "<META http-equiv=\"Content-Type\" content=\"text/html; ch

  • ファイルから読み込む | beginners CGI

    配列に入れると配列の各要素に全てが読み込まれますが、 @aaa = <IN>; の部分で スカラー変数に入れると ($a = <IN>;) 一行のみの読み込みが行われます。 何らかの理由で先頭行のみ、読み込みを行いたい場合はスカラー変数に入れます。 $a = <IN>; と一行読み込んだ後は、<IN> は読み込んだ先頭行が消えています。 例えば下のソースを見て下さい。 #!/usr/local/bin/perl open (IN,"test.txt"); #test.txtというファイルを読み込む $aaa = <IN>; #先頭行を変数 $aaa に入れる(ここで変数 $aaaは使いません) print <IN>; #ファイルハンドルをprintすると先頭行を除く行が表示されます close (IN); #ファイルハンドルを閉じる exit; $a = <IN>; などして一行読み込むと

  • 1