Perl コーディング初心者質問コーナー Part33
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/03/01 02:46ID:1GeWO7LH【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0759747
04/03/25 12:13ID:w7s8ctdpHow can I read in a file by paragraphs? あたりを読めということですかね。さぱりわかんないんですけど頑張ってみます。
0760749
04/03/25 12:19ID:???0761nobodyさん
04/03/25 12:50ID:???<input type="hidden" name=".cgifields" value="ItemNum">
というタグが自動的に追加されます。
-nostickyを使用すると出ないのは分かってるのですが、
どのような原理で、scrolling_listのname属性が、hiddenのvalue値に設定されるのでしょうか?
print start_form(),
hidden('ItemId',"id"),
scrolling_list('ItemNum',['1','2','3','4','5'],['1'],1),"個",
submit('','購入'),
end_form;
0762nobodyさん
04/03/25 13:08ID:???0763nobodyさん
04/03/25 13:20ID:???ハッシュってどういう風に変数名をつければいいのでしょうか?
0764nobodyさん
04/03/25 13:37ID:???0766nobodyさん
04/03/29 06:30ID:???>>765
やってみます、分からないと思うけど・・・・
767 :761 :04/03/25 16:34 ID:???
register_parameter が関係ありますか・・?
768 :nobodyさん :04/03/25 17:28 ID:xE36oyJb
今日からperlをやろうと思ったのですが、いきなりエラーが出ました。
でもどこを修正すればいいのか分かりません。
どうかご教授してください。
【OS】Win98SE
【perl】perl, v5.6.1 built for MSWin32-x86-multi-thread
【コード】
print <<EOL;
<html>
<body>
<p>Hello perl world</p>
</body>
</html>
EOL
【エラー】
Can't find string terminator "EOL" anywhere before EOF
at test.cgi line 1.
769 :nobodyさん :04/03/25 17:30 ID:???
test.cgi 1行でストリング・ターミネーター「EOL」をEOFの前にいかなる場所にも見つけることができません。
0767nobodyさん
04/03/29 06:32ID:???use strict;
eval{
my $htmlPTC = &get_htmlPTC('hoge');
};
のあとに、
$htmlPTCの値を取り出したいのですが、
どうすればいいのでしょうか?
use vars qw($htmlPTC);
とやってもとりだせませんでした。
771 :nobodyさん :04/03/25 17:46 ID:???
>>768
Content-type: text/html;
772 :nobodyさん :04/03/25 17:50 ID:???
>>771
あーあ
0768nobodyさん
04/03/29 06:33ID:???>>771
レス、ありがとうございます。
でも、同じエラーが出てしまいました。(´・ω・`)ショボーン
【コード】
print "Content-type: text/html; charset=Shift_JIS\n\n";
print <<EOL;
<html>
<body>
<p>Hello perl world</p>
</body>
</html>
EOL
【エラー】
Can't find string terminator "EOL" anywhere before EOF
at test.cgi line 3.
774 :nobodyさん :04/03/25 18:00 ID:???
>>767
Yes.
>>770
my $htmlPTC = eval { get_htmlPTC('hoge') };
$@ and error();
>>773
EOL の後ろに空白が付いているか改行していないに 300 ペリカ。
0769nobodyさん
04/03/29 06:33ID:???以下のようにするときちんと表示されました。
何故だろう??
【コード】
print "Content-type: text/html; charset=Shift_JIS\n\n";
print "<html>";
print "<body>";
print "<p>Hello perl world</p>";
print "<html>";
print "<body>";
776 :nobodyさん :04/03/25 18:01 ID:???
>>773
最後のEOLの後ろにちゃんと改行入れてる?
777 :768 :04/03/25 18:02 ID:???
>>774
空白がついてました。ヽ(´ー`)ノ
ありがとうございます。
778 :768 :04/03/25 18:04 ID:???
>>776
空白でした。
すみません。m(_ _)m
0770nobodyさん
04/03/29 06:34ID:???現在open()しているファイルのパスを調べるにはどうすれば良いのでしょうか。
指定したファイルを開かずに他のファイルを開いているというとんでもない事が起こっていて、
しかもその開いているファイルが見付からないのです。
#絶対パス、相対パス共に調べた
なので現在のファイルハンドルがどのファイルに関連付けられているかを
知ることが出来たら良いのですが。
780 :nobodyさん :04/03/25 18:30 ID:7rJYuY6t
配布CGIを設置する際の質問はここでよろしいのでしょうか?
KENTのyybbsをiswebに設置したいのですが404が出てしまいます。
その前に1998特報倶楽部の画像掲示板を/cgi-binの中に設置しました。
その画像掲示板は無事動くのですがyybbsが動きません。
http://www.kent-web.com/bbs/yybbs.html
FTPで上にあるようにまず一番上(index.htmlやcgi-binがある場所)にyybbsフォルダを作りました。
そしてパーミッションとかを設定したあとhttp://アドレス/yybbs/yybbs.cgiと入れたのですが404でした。
yybbs.cgiはまだいじってません(パスはそのままで大丈夫です)ので壊れたって事は無いと思います。
もしかしたらcgi-binの中にyybbsディレクトリを作らなくてはならないのですか?
781 :nobodyさん :04/03/25 18:36 ID:???
>>780
>配布CGIを設置する際の質問はここでよろしいのでしょうか?
よろしくない。
そして誰もよろしいなんていってないのに質問するな。それなら1行目に何の意味が?
0771nobodyさん
04/03/29 06:35ID:???>>781
ごめんなさいね^^^^;;
783 :nobodyさん :04/03/25 18:48 ID:???
>>779
open に渡している変数の中身と、open する時点のカレント
ディレクトリを調べる。
784 :nobodyさん :04/03/25 21:23 ID:???
>>739
> for (reverse 0 .. 5) {
リストが作られるから、
0..10000なんてやると、かなりメモリ食うと思う。
785 :nobodyさん :04/03/25 22:30 ID:???
>>783
変数の中身というかopenするファイル名を直接指定しても駄目なのです。
open(<FILE>, "< ./foo.dat") or die $!;
のように。
カレントディレクトリの調べ方はどうすれば良いのでしょう。
786 :nobodyさん :04/03/25 22:58 ID:???
>>785
http://perldoc.com/perl5.8.0/lib/Cwd.html
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_open_FILEHANDLE_MODE_LIST
0772nobodyさん
04/03/29 06:35ID:???>>749=>>760
ご、ごめんなさい、_| ̄|○
ありがとうございました。
788 :763 :04/03/25 23:37 ID:???
>>764
まじれすキボンヌ。(まじれすだった?)
789 :nobodyさん :04/03/25 23:40 ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
790 :nobodyさん :04/03/25 23:43 ID:???
>>788
あ男の子でしたか
じゃあ最近は翔とかそういう所謂男らしい名がいいかと思います。
元気に育つといいですね。
791 :763 :04/03/25 23:55 ID:???
みんなはハンガリアン記法の場合、ハッシュはどう書いてるんだろか
792 :nobodyさん :04/03/26 00:14 ID:???
perlとどう関係があるのかと…
793 :nobodyさん :04/03/26 00:18 ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
794 :nobodyさん :04/03/26 02:51 ID:???
>>791
マジレスすると、変数に付いている%や$や@は何のためにあるのかと。
0773nobodyさん
04/03/29 06:36ID:???>>773
print <<"EOL";
にしたらどうよ。
796 :nobodyさん :04/03/26 09:48 ID:???
( ゚д゚)ポカーン
797 :nobodyさん :04/03/26 10:00 ID:???
遅レス(・∀・)カコイイ!!
0774nobodyさん
04/03/29 06:37ID:???ある会員リストを登録更新表示するCGIなのですが、
更新作業で、
1)更新を受け付ける
2)データベースを更新
3)一つ目の関連するファイルの更新
4)二つ目の関連するファイルの更新
5)最新リストを表示
としているのですが、3,4の作業の負荷が高く5の最新リスト表示まで
時間がかかります。
実際5の最新リスト表示には2のデータベース更新が終わっていれば
問題ないので例えば
1)更新を受け付ける
2)データベースを更新
5)最新リストを表示
として
3)一つ目の関連するファイルの更新
4)二つ目の関連するファイルの更新
は別プロセスとかでバックグラウンドでやらせたいのですが
方法がわかりません。
基本的にどんな風にすればいいですか?
0775nobodyさん
04/03/29 06:39ID:???友人と二人でjoyful2chという画像掲示板を使っているのですが
連続投稿の時間規制と同じ文字数のレスを直後に書けない規制が
やっかいなのでなくしたいのですが、設定でオンオフできないので
その部分に関するスクリプトを削ってしまえば、
機能は停止するのでしょうか?
その部分に関するスクリプトは以下のようなところだとあたりを付けました。
# 連続投稿チェック
if ($addr eq $ip && $wait > $times - $time2)
{ &error("連続投稿はもうしばらく時間をおいて下さい"); }
# 重複チェック
$flag=0;
foreach (@lines) {
($no2,$reno2,$date2,$name2,$mail2,$sub2,$com2) = split(/<>/);
if ($in{'name'} eq $name2 && $in{'comment'} eq $com2) {
$flag=1; last;
}
}
if ($flag) { &error("重複投稿のため処理を中断しました"); }
0776nobodyさん
04/03/29 06:40ID:???>>798
ロジックを語るならスレ違い。スレタイ嫁。
801 :nobodyさん :04/03/26 10:47 ID:???
>>799
試してから質問したんだよな?
試した結果はどうだったよ?
まさか試さずにどうなるかの結果だけを教えてくれなんて都合のいいことは言わないよな?
802 :nobodyさん :04/03/26 10:51 ID:tN6LIksl
>>800
どこいけばいいですか?
803 :nobodyさん :04/03/26 10:52 ID:???
春休みUZEEEEEEEEEEEE
804 :nobodyさん :04/03/26 10:56 ID:???
>>800
WebProg板の住人の大半、あるいはCGI設置して喜んでる日本人の95%以上は、
ロジック/アルゴリズムとコーディングの区別がついていないんじゃないか、
という気が前々からしている。
>>798
「別プロセスを作りたいのでコーディング方法教えて」という話なら
fork 関数の説明嫁、で終わりだが、率直な疑問として、
「別プロセス作らなくても1->2->5->3->4の順番で処理すりゃいいぢゃん?」
という気がするのだが、
まあここはコーディングスレなので、ロジックについては語らないことにしよう。
0777nobodyさん
04/03/29 06:41ID:???>>804
> >>800
> WebProg板の住人の大半、あるいはCGI設置して喜んでる日本人の95%以上は、
> ロジック/アルゴリズムとコーディングの区別がついていないんじゃないか、
> という気が前々からしている。
スレ違い。スレタイ嫁。ニッキはニッキスレ
806 :798 :04/03/26 11:21 ID:???
>>804
「別プロセス作らなくても1->2->5->3->4の順番で処理すりゃいいぢゃん?」
という気がするのだが、
そうですよね、処理順変えればいいだけですよね。
なんか勘違いしてました。
どうもありがとうございました。
807 :nobodyさん :04/03/26 11:48 ID:???
生まれてきたのも勘違いであって欲しい
0778nobodyさん
04/03/29 06:42ID:???>804
ロジック自体の意味が検索で見付からなかった
(ロジックボードとかばかり出てくる)のですが、
ロジック = 手順、アルゴリズム = 方法とかいう認識で良いのですか。
809 :nobodyさん :04/03/26 14:01 ID:???
my $flag = 1;
if ( $flag ) {
use constant HOGE => 1;
} else {
use constant HOGE => 2;
}
これで、HOGE が 1 になるかと思いきや、
なぜか 2 になる。
最後に指定したやつがセットされるのはなぜ?
810 :nobodyさん :04/03/26 14:24 ID:???
>>809
use は実行時でなくコンパイル時に処理されます
811 :nobodyさん :04/03/26 14:36 ID:???
>>808
ロジックやアルゴリズムの話はスレ違い。
812 :809 :04/03/26 15:18 ID:???
>>810
なるほど。
ありが�d
0779nobodyさん
04/03/29 06:43ID:???>>812
BEGIN
{
require constant;
if(...){
import constant FOO => 1;
}else{
import constant FOO => 2;
}
}
# or
my $flag;
BEGIN{ $flag = 1 } # $flagはコンパイル時に決定している必要がある
use constant FOO => $flag ? 1 : 2;
# or いっそconstantを使わない
BEGIN{
if(...){
*FOO = sub(){ 1 };
}else{
*FOO = sub(){ 2 };
}
}
0780nobodyさん
04/03/29 06:43ID:???>>791
正直読み難い上に意味も無いのでお勧めできないが、下記のような感じかな。
DBD::Excelの作者である川合氏はこの命名法を使っているね。
しかしPerlでハンガリアンしてどういうつもりなのかマジで謎。特に@aXxxと%hXxx。「馬から落馬しました」みたいな。
そりゃまぁ、リファレンスだけなら俺も$sref_xxx,$aref_xxx,$href_xxxとかする事もあるがね。
$sString
$iInteger
$nNumeric
$oObject
$hHandle
$rsRefToScalar
$raRefToArray
$rhRefToHash
%hHash
@aArray
0781nobodyさん
04/03/29 09:10ID:WLF8C9h80782nobodyさん
04/03/29 10:14ID:???$retry = 5;
while (!mkdir ($lockdir, 0755)) {
if (--$retry <= 0) {
&error("BUSY");
}
sleep(1);
}
#一連の処理
rmdir($lockdir);
このようなファイルロックをよくみかけるのですが、
何故ディレクトリを作る事によって、ログなどの対象ファイルがロックされるのですか?
0783nobodyさん
04/03/29 10:19ID:???http://www.bayashi.net/st/pdmemo/filelock.html
0784漏れはこれだけ補完できる
04/03/29 13:17ID:???>>739
> for (reverse 0 .. 5) {
リストが作られるから、
0..10000なんてやると、かなりメモリ食うと思う。
0785漏れはこれだけ補完できる
04/03/29 13:18ID:???既に張っている人、乙!
0786nobodyさん
04/03/29 14:51ID:???http:\/\/\w+(\.2ch\.net\|\.bbspink\.com)\/\w+\/
であってますか?
0788nobodyさん
04/03/29 16:28ID:???localとmyの使い分けについてなのですが、
どちらを使っても厳密な違いはないのでしょうか?
localはPerl4、myはPerl5以降という話を見たことがあるのですが、
環境を選ばずに正確に動作させるのならば、
myではなくlocalで統一したほうがいいのでしょうか。
0791nobodyさん
04/03/29 20:16ID:???http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq7.html#What_s_the_difference_between_dy
0792nobodyさん
04/03/29 21:54ID:???意味を結果ファイルに書き出していくスクリプトを作ったのですが、うまくいきません。
動作自体には問題はないのですが、結果ファイルに照合した単語を書きこむと、
一部の文字が化けてしまいます。
例えば阿諛追従という文字列をgooの辞書で検索し、結果を書き出すと、
�艸追従
となってしまいます。検索結果は問題なく書き込まれています。
単純に阿諛追従とテキストに書き出すスクリプトで試してみましたが、文字化けは
起こりませんでした。ちなみにスクリプトはShiftjisで書かれています。
実行環境はWindowsMe+ActivePerl最新版です。
いくら考えてもどこがおかしいのか分からないので、申し訳ないのですが、
短いコードですので全部載せさせて下さい。
---------------------------------------
#!/etc/env perl
use strict;
use LWP::Simple;
use Win32::FileOp;
my $file="a.html";
my $meanfile = "mean.txt";#結果ファイル
my $str;
my $wordfile = "word.txt";#単語リスト
my $mflag = 0;
open IN, "$wordfile" or die "$!";
my @wordlist = <IN>;
close IN;
open OUT, ">>$meanfile" or die "#!";
0793nobodyさん
04/03/29 21:56ID:???my $word = $_;
&url_encode($word);
my $url="http://dictionary.goo.ne.jp/search.php?MT=" . "$str" . "&kind=jn";
print $url;
if (is_success(getstore($url,$file)))
{
open IN, "$file" or die "$!";
print "$word\n";
while (my $data = <IN>) {
if ($data =~ m/<!--meaning_body-->/) {
$mflag = 1;
chomp($word);
print OUT "<title>$word</title>\n";
next;}
if ($data =~ m/<!--\/meaning_body-->/) {
$mflag = 0;}
if ($mflag == 1) {
$data =~ s/<br>/\n/g;
$data =~ s/<small>|<\/small>|<b>|<\/b>//g;
if ( ! ($data eq "\n") ) {
print OUT "<contents>$data</contents>\n";}}}
close IN;}}}
close OUT;
ShellExecute 'open' => $meanfile;
sub url_encode{
$str = shift;
$str =~ s/(\W)/'%'.unpack("H2", $1)/eg;
$str =~ tr/ /+/;
}
よろしくお願いします。
0795792
04/03/29 23:06ID:???見てみました。gooはEUC-JPでした。
で、ますます混乱してしまいました。
単語リストはSJIS、照合結果のhtmlファイルはEUCJP,
単語リストから抜き出した単語と照合結果のhtmlファイルから
抜き出した意味のデータを組み合わせて結果ファイルに書き
込むと結果ファイルはEUCJP・・・・・
EUCJPと認識されているテキストにSJISのコードを書きこむと
化けるのは分かります。でもそれならSJISで書きこんだコード
全てが化けるのではないのですか?
阿諛追従は文字化けしましたがその他の大半の単語はそうは
なりませんでした。どうしてこのようなことになるのでしょうか?
それと、Windowsの基本文字コードはSJISですよね?なのに
どうして<title>SJISの文字列</title><contents>EUCJPの文字列</contents>
とprintで書きこんだテキストファイルがEUCJPとして認識され
てしまうのでしょうか?Windowsがテキストファイルの文字コード
をどのように判別しているか定かではないのですが、もし先頭の
何文字かをもとに判定しているとしたら、
Windowsにおいてperlから特に処理を
施さずに生成した文字列はSJISのはずでそれがファイルの先頭に
書きこまれているにもかかわらずなぜテキストファイルがEUCJP
として認識されてしまうのでしょうか?
文字コードに関する認識不足が多分にあると思われますが、
なにとぞご容赦下さい。
0796nobodyさん
04/03/29 23:07ID:???検索キーワードは>>789参照だが、少し補足
ぶっちゃけ、myとlocalは全く用途が違う。
myはlocalの代わりには出来ないし、localをmyの代わりに使うことはない。
変数の宣言にはmyを使う。。
localは既存の変数を一時的に局所化する為に使う。
sub f{
# 通常使う変数はmy
my($foo, $bar);
my @array = ($foo, $bar);
# 既存の変数を一時的に置換え
local $_ = 'str';
local $SomePackage::PublicVariable = 1;
}
# 関数f()の呼び出しが終われば、$foo,$bar,@arrayは消滅し、$main::_,$SomePackage::PublicVariableは関数呼び出し前の値が復帰する
0797nobodyさん
04/03/29 23:41ID:???非常に有用なのでぜひ参照したいのですが、
どうにかならんのでしょうか?
0798nobodyさん
04/03/29 23:50ID:???pc5鯖に復旧した時に一日分消えてしまったよ事件」のログなら
>>766-780
もともとのレス番は766から814らすぃな
0799nobodyさん
04/03/30 00:17ID:???CGI.pmを使ったサンプルコードをいくつかみたところ、
while ($bytesread = read($fh,$buffer,1024)) {
print OUT $buffer;
}
といった風になってます。
$bytesreadはなんなのでしょうか。
とりあえずその部分を削って
while (read($fh,$buffer,1024)) {
としたところでエラーは出なかったのですが(win)
意図的にスカラーコンテキストにしているんでしょうか?
あるいは特殊な変数なのでしょうか?
また、もし前者ならmy宣言した方が軽くなるような気がするのですが、
どのコードもしてません。
その辺教えていただけませんでしょうか?
参考↓
http://www.google.co.jp/search?num=50&hl=ja&inlang=ja&ie=Shift_JIS&c2coff=1&q=perl+while+bytesread+read+buffer&lr=lang_ja
0800nobodyさん
04/03/30 00:18ID:???0801779
04/03/30 00:22ID:???「perl while read buffer」
$bytesread抜きの、つまり>>799で書いた
>while (read($fh,$buffer,1024)) {
のような形で書かれたページも見つかりますね。
いらないのかな。何の意味があるんでしょう。
0802nobodyさん
04/03/30 01:06ID:???http://perldoc.com/perl5.8.0/pod/func/read.html
http://perldoc.jp/docs/perl/5.6.1/perlvar.pod
君が参考にしたページの作者も、君と同じくコピペプログラマなんだろう。
意味の有無は判断材料を集めて自力で考えてみなさい。
0803nobodyさん
04/03/30 01:14ID:???CGI::Sessionつかって
$session = new CGI::Session("driver::File", undef, {Directory => $session_dir});
$sid = $session->id();
$session->param("aaa", "v_bbb");
のようにして、得たセッションIDをもとに次にアクセスするときにその
セッションIDをもとに
$session = new CGI::Session(undef, $sid, {Directory => $session_dir});
として、前のセッションのデータにアクセスしようとしたんですが、データを
引き継げてないようです。これは使い方が間違っているのでしょうか?
ぶっちゃけparamメソッドで入力したデータに二回目以降のアクセスで
取得できるようにするにはどのようにすればいいのでしょうか?
$session_dirに指定したファイル?もどこにあるかわからないし、、、
わからないことずくしです。
0804nobodyさん
04/03/30 01:58ID:???有難うございます。
サンプルとなるコードを検索してそれを理解する。わからなければ時には弄くり倒しながら。
そして理解できたら自分なりの方法でコーディングする。
これがコピペプログラマーでしょうか?
bytesreadが定義済み変数なのかは調べた。しかし探してもそのような記述は見当たらない。
英語は苦手だから日本語texinfoのttp://flex.ee.uec.ac.jp/texi/perl/perl_90.html
だって見た。それでも解決しない。
ところがbytesreadという変数を使ったコードを紹介するサイトが山のようにある。
・・・私には理解できない。
しかし言われてみて思った。
while内で$bytesreadを参照し処理をしていたスクリプトがあった。
そのソースからコピペして$bytesreadは使わないのに残したままである。
そんなコードを参考にしてしまった。
こんなところですか?
0805nobodyさん
04/03/30 07:09ID:???結果を書き出すのにEUC-JPかShift_JISかに統一しる。
# 私のところでは、そんな化け方しないけど。
>>797
HTML版はあるけど、2chブラウザ用のが無いのかも。
>>803
$session_dirディレクトリの中にファイルが作られる。
まずはそこから確認。
0806nobodyさん
04/03/30 07:29ID:???> HTML版はあるけど、2chブラウザ用のが無いのかも。
ありました。
リンクをhttp://pc5.2ch.net/にしないとだめなのね(そりゃそうか)。
0807nobodyさん
04/03/30 10:54ID:???>while内で$bytesreadを参照し処理をしていたスクリプトがあった。
>そのソースからコピペして$bytesreadは使わないのに残したままである。
>そんなコードを参考にしてしまった
恐らくそういうこと。というか、>>5-6あたりを参照するのは基本だが底から少しでも探した?
世の中のコピペプログラマがいかにダメコード汚染を撒き散らすかということがよくわかるよ。
とはいうものの、readに関していうなら、C言語では極めて重要なreadの戻り値がPerlでは意味が薄れている為、
マニュアルを読んだだけではその意味するところを理解し難いというのはあると思うけどね。
0808nobodyさん
04/03/30 12:24ID:???0809nobodyさん
04/03/30 13:18ID:???Bareword found where operator expected at - line 1, near "$テ"
(Missing operator before e?)
syntax error at - line 1, near "$テ"
Unrecognized character \x83 at - line 1.
な上に、gオプションはいらないだろ。
${'テンプレ'} =~ s/pc2/pc5/;
どうでもいいか・・・
0811nobodyさん
04/03/31 06:09ID:???>Windowsがテキストファイルの文字コードをどのように判別しているか定かではないのですが
Windows 自体は文字コードの判別など「しない」。
ブラウザかテキストエディタか知らんが判別しているのはアプリ側。
つまり自動判別に頼る場合(ロジックが異なる可能性があるから)、
開くアプリによって結果が異なることもある。
先頭数文字で判別するアプリもあれば、どちらかのコードで解釈できなくなった時点で
コードを決定するアプリもあるだろう。
>阿諛追従は文字化けしましたがその他の大半の単語はそうは
>なりませんでした。
「その他の大半の単語」の方は本文(意味)の方もちゃんと読めるのか?
結論としては >>805 の通り、文字コードを統一してから書き込めってことだが。
ActivePerl 最新版(5.8系列)なら use Encode すれば文字コード変換を使えるはず。
0812nobodyさん
04/03/31 08:34ID:???変数の型(HASHやARRAY)を返す関数があったと思うんですが
忘れてしまいました、誰か助けてぇ〜
0813nobodyさん
04/03/31 10:07ID:???0814792
04/03/31 10:48ID:???>>811
どうもありがとうございました。
Encodeではありませんが、jocde.plでEUCJPに統一することで解決しました。
>「その他の大半の単語」の方は本文(意味)の方もちゃんと読めるのか?
はい、何故か本文の方は全く文字化けしませんでした。
0815nobodyさん
04/03/31 11:35ID:???http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldata.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html
0817nobodyさん
04/03/31 16:37ID:msaZKwhoこうじゃなくて
sub hoge{
}
こう書くのが正しいのですか。
sub hoge
{
}
0818nobodyさん
04/03/31 16:53ID:???http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlstyle.html
0820nobodyさん
04/03/31 22:18ID:???0823820
04/03/31 22:33ID:???COOKIEの書き込みを行っているんですが、
なぜか$EMV{'HTTP_COOKIE'}にCOOKIEの値として認識されてきません。
もっとも単純なCOOKIEを書き込んで、読み出すだけ、のCGIであれば問題は無いのですが、
なぜかいろいろ付け加えていくウチに、$ENV{'HTTP_COOKIE'}の値を正常に読み込まなくなってしまいます。
何度1から作り直しても同じ事が起きるのですが、これは原因として考えられる部分が他にあるのでは、と考えています
Perlの都合上でCOOKIEの書き込み読み込みに異常を来すような例は考えられますでしょうか
ちなみに、COOKIEに関する部分は至って単純で、ソースは以下の通りです。
これを動作させたところ、COOKIEの中身が表示されるべき所に全く文字は出力されませんでした。
$jcode= './jcode.pl';
$getArg= './getarg.pl';
require $jcode;
require $getArg;
print "Content-type: text/html\n";
print "Set-cookie: style=",$PostARG{'style'}||$CookieARG{'style'},"; expires=Thu, 1-Jan-2030 00:00:00 GMT;\n";
print "Set-cookie: access=",$date{'mon'},$date{'mday'},"; expires=Thu, 1-Jan-2030 00:00:00 GMT;\n\n";
中略
print $CookieARG{'style'};
print $CookieARG{'access'};
print $ENV{'HTTP_COOKIE'}};
後略
0824nobodyさん
04/03/31 22:34ID:fllGa8Oy%GetARG = %PostARG = %CookieARG = ();
($date{'sec'},$date{'min'},$date{'hour'},$date{'mday'},$date{'mon'},$date{'year'},$date{'wday'},$date{'yday'},$date{'isdst'}) = localtime(time);
foreach ( split /[&,]/,$ENV{'QUERY_STRING'} ){
($name, $value) = split /=/;
$value =~ s/\+/ /g;
$value =~ s/%([0-9a-fA-F]{2})/pack("C", hex($1))/ego;
&jcode'convert(*value,'sjis');# コードをShift_JISに
$GetARG{$name} = $value;
}
if($ENV{'REQUEST_METHOD'} =~ /^POST$/i){
read(STDIN , $POST , $ENV{'CONTENT_LENGTH'});
foreach ( split/&/,$POST ){
($name, $value) = split /=/;
$value =~ s/\+/ /g;
$value =~ s/%([0-9a-fA-F]{2})/pack("C", hex($1))/ego;
&jcode'convert(*value,'sjis');# コードをShift_JISに
$PostARG{$name} = $value;
}
}
0825nobodyさん
04/03/31 22:35ID:fllGa8Oyforeach ( @_ ){
($name, $value) = split /=/;
&jcode'convert(*value,'sjis');# コードをShift_JISに
$CookieARG{$name} = $value;
}
foreach ( keys %CookieARG ){
print "Set-Cookie: $_=",$CookieARG{$_},"; expires=Thu, 1-Jan-2030 00:00:00 GMT;\n";
}
foreach ( keys %GetARG ){
print "Set-Cookie: $_=",$GetARG{$_},"; expires=Thu, 1-Jan-2030 00:00:00 GMT;\n";
}
foreach ( keys %PostARG ){
print "Set-Cookie: $_=",$PostARG{$_},"; expires=Thu, 1-Jan-2030 00:00:00 GMT;\n";
}
1;
0826nobodyさん
04/03/31 22:52ID:???0827nobodyさん
04/03/31 22:56ID:fllGa8Oy0828nobodyさん
04/03/31 23:13ID:???スレ違いだから答えない。
0829nobodyさん
04/03/31 23:18ID:???取り合えずここじゃないとなると初心者スレなんかなあ……。
0830nobodyさん
04/03/31 23:38ID:???0831nobodyさん
04/03/31 23:44ID:???0832nobodyさん
04/03/31 23:45ID:???0833nobodyさん
04/03/31 23:51ID:fllGa8OyCOOKIE関連のまともなスレなんてWebProg板に無いんですが
0834nobodyさん
04/03/31 23:54ID:fllGa8Oyどこで聞けば分かるんだ
0835nobodyさん
04/04/01 00:01ID:f/d+tf5t単純にCOOKIEに値を書き込んで、それを読み出すくらいは出来てるんです。
ただ、それに肉付けしていったときに読み込めなくなったりしたので、他の部分が影響を及ぼしているのは明らかなので、
どういった部分がCOOKIEへの値書き込みにこういう影響を及ぼすのか、って聞いてるのに、
ス レ 違 い
違わないでしょう
0836nobodyさん
04/04/01 00:07ID:???「Perl コ ー デ ィ ン グ 」スレ。
コーディングの問題ではないのだからスレ違いだろう。
>828を読んでCOOKIEの仕様を勉強しなおしてこい。
0837nobodyさん
04/04/01 00:12ID:???原因はコーディングにある(と本人は言っている)のでコーディングに関しての話なんじゃないの?
と言うかこのスレのコーディングの定義が最近良く解らない……。
0838nobodyさん
04/04/01 00:23ID:???コードとにらめっこしてなさいよ。
0839nobodyさん
04/04/01 00:28ID:???0840nobodyさん
04/04/01 00:29ID:???0841nobodyさん
04/04/01 00:43ID:???2週間が経過してるんだが・・・・・
もうだめぽ
0842nobodyさん
04/04/01 01:00ID:???0843nobodyさん
04/04/01 01:17ID:???$ENV{'HTTP_COOKIE'}を疑う前にCookieファイルの中身はちゃんと確認したの?
セパレータとかエンコードとか。
コーディングを疑う前にCookieのお作法を理解しないと先にすすめないよ。
0844nobodyさん
04/04/01 02:07ID:OWaSi467つまり本当は4月1日のどこかで閉鎖するかもしれない。
実際に広告枠の所に「2004年4月1日に何かある」とあるんだしまだ希望はあるんじゃないか。?
2ch閉鎖実況スレ
http://ex2.2ch.net/test/read.cgi/net/ 1080586834/
↑間を消して
まだ1日ありますぞい
↑コピペyoro
0845nobodyさん
04/04/01 02:34ID:???サーバが食べられるクッキーはクライアントが吐いたものだけ。
自分で吐いたクッキーは食えねえぞゴルァ。
の呪文を100回唱えて、もう一回コードを見直しましょう。
0846nobodyさん
04/04/01 21:54ID:Al4MgY0yブラウザの戻るボタンで戻った時などに、いちいち再読み込みされないようにしたいです。
ヘッダのところに何か追加すればいいのかなというところまでは分かったのですが、
そこから先がどうしても分かりません。
よろしくお願いします。
0847nobodyさん
04/04/01 21:55ID:???△▲ WebProg 初心者の質問 Part8 ▼▽
http://pc5.2ch.net/test/read.cgi/php/1078568723/
CGI: Common Gateway Interface part 11
http://pc5.2ch.net/test/read.cgi/php/1055597189/
まずは過去ログを全部読め
0848nobodyさん
04/04/01 22:11ID:Al4MgY0yキャッシュさせないようにしたいという話は時々見ますが
キャッシュされるようにする方法というのは見つかりませんでした。
でも戻るボタンで戻っても再読み込みされない掲示板とかありますよね。
ああいうのってどうやってるんでしょうか?
すごい初心者ですいませんが、下の例だと何を追加すればいいんでしょう?
#!/usr/local/bin/perl
print "Content-type: text/html\n";
print "\n";
print "<HTML>\n";
(中略)
print "</HTML>\n";
__END__
0849nobodyさん
04/04/01 22:50ID:???キャッシュされるんじゃないかな。
0850nobodyさん
04/04/01 22:53ID:???0851nobodyさん
04/04/01 23:24ID:Al4MgY0y設置したいCGIがあるのですが、ページ移動のたびに読み込まれるのが嫌で
自分で改造したいと思っています。
.cgiのままでもキャッシュさせる方法はないでしょうか?
>>849>>850
どこをどう変えたらいいのでしょうか?
>>848みたいなのでキャッシュさせないのは無理ですか?
0854nobodyさん
04/04/02 00:00ID:???0855nobodyさん
04/04/02 00:02ID:???(仮に)何かを追加してできるようになるとしても、
その何かを調べるのは少なくともこのスレじゃない、気がする。
■ このスレッドは過去ログ倉庫に格納されています