Perlコーディング初心者質問スレ Part 43
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/08/12(金) 01:26:47ID:mHnZWvqz【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0575nobodyさん
2005/09/23(金) 11:41:48ID:???とか、言ってみたりする。
0576nobodyさん
2005/09/23(金) 11:47:00ID:???JavaScript にしとけ。
0577nobodyさん
2005/09/23(金) 12:07:02ID:???0579nobodyさん
2005/09/23(金) 16:12:52ID:NELxQvyQここのアクセスカウンターって改造されてね?
0580nobodyさん
2005/09/23(金) 16:20:20ID:???0582nobodyさん
2005/09/23(金) 20:49:12ID:???0583nobodyさん
2005/09/23(金) 21:32:21ID:???0584nobodyさん
2005/09/26(月) 01:11:42ID:???Perl内で、他のURLにあるデータを参照することはできますか?
具体的には、
open(WORK,"http://www.hogehoge.net/foo/baa.txt");
みたいな事です。
0587nobodyさん
2005/09/26(月) 02:22:09ID:???なぜゆえ・・・
0588nobodyさん
2005/09/26(月) 02:59:24ID:???0589nobodyさん
2005/09/26(月) 04:43:37ID:???0591nobodyさん
2005/09/26(月) 17:53:48ID:???チェックボックスでデータを受け取って
HTMLの確認画面に反映させるプログラムを作っているのですが
行き詰まりました。
例えば、course1,course2,course3とあってcourse1とcourse3がチェックされたら
course2のところが空白で反映されます。
ex.)HTML出力画面
course1
course3
こんな感じになります。
この空白を詰めて
course1
course3
みたいな風に出力したいのですがどのようにすれば良いでしょうか?
0592591
2005/09/26(月) 17:54:19ID:???if($FORM{'course1'} ne "on"){
print "<TR><TH ALIGN=\"right\" VALIGN=\"top\">希望コース:</TH><TD>\n";
print "$HTML{'course1'}\n";
print "<INPUT TYPE=\"hidden\" NAME=\"course1\" VALUE=\"$FORM{'course1'}\">\n";
print "</TD></TR>\n";
}
if($FORM{'course2'} ne "on"){
print "<TR><TH ALIGN=\"right\" VALIGN=\"top\"></TH><TD>\n";
print "$HTML{'course2'}\n";
print "<br>";
print "<INPUT TYPE=\"hidden\" NAME=\"course2\" VALUE=\"$FORM{'course2'}\">\n";
print "</TD></TR>\n";
}
0593nobodyさん
2005/09/26(月) 18:03:42ID:???>>592も質問するには情報足らないので、エスパーのフリをしてみる。
foerach ('course1','course2','course3') {
if ($FORM{$_} eq "on") { next; }
print "<TR><TH ALIGN=\"right\" VALIGN=\"top\">希望コース:</TH><TD>\n";
print "$HTML{$_}\n";
print "<INPUT TYPE=\"hidden\" NAME=\"$_\" VALUE=\"$FORM{$_}\">\n";
print "</TD></TR>\n";
}
これでまず問題点を切り分けてくれ。
0594nobodyさん
2005/09/26(月) 18:16:11ID:???思うにそれは空白をつめて表示させるためにはどのようなHTMLであるべきか
という問題であって、それさえわかってしまえばその通り出力するプログラムを
書けばいいだけだから、まずHTMLに詳しい人がいるところで質問するのが
スジってもんじゃないだろうか。ここにもいるかもしれないけどさ。
0595591
2005/09/26(月) 18:19:54ID:???ありがとうございます、無事に動きましたw
エスパーですね!
すみません、情報不足で・・。>>594さんが書いた通りです。
>>594
すみませんでした。 orz
0596nobodyさん
2005/09/26(月) 18:27:36ID:???変数以外で同じ文字を出力する場合とかは、とりあえずループにかければ問題点は見つかる。
コピペしたつもりでも、うっかりで変わってたりするから。
0598nobodyさん
2005/09/26(月) 21:18:44ID:Q7jBJFo3<TR>
<TH ALIGN="right" VALIGN="top">希望コース:</TH>
<TD>
$HTML{$_}
<INPUT TYPE="hidden" NAME="$_" VALUE="$FORM{$_}">
</TD>
</TR>
END
エスケープとかprint連記とかキモイからこれぐらいスッキリしてもらえる?
いや、オナニーだけどさ。
0599nobodyさん
2005/09/26(月) 21:48:52ID:fXbmUf3O0600nobodyさん
2005/09/26(月) 22:27:10ID:???ヒントをいただきたく思っております。
cgiで書き出すhtmlページ page1 → page2 に進んで、 page1に戻ったときに 「あんたpage2に進んだからもう戻れないよ!!」
ってやりたいのですが、
集めた情報では cookieでセッション管理して、page1でcookie → page2でcookieになんか値を持たせる。
でもってpage1に戻ったら値違うからダメよ!みたいなことをしろ!!
とあったのですが、どんなソースなのかさっぱりです。。
どなたか道しるべいただけませんでしょうか?所謂ブラウザの戻る制御みたいなことなのですが、
phpではなく perlでやりたいです。
野暮な質問ですいません。何卒宜しくお願いいたします。
0601nobodyさん
2005/09/26(月) 22:38:13ID:???その集めた情報の意味がわからないなら、ここで聞いても意味がないと思います。
クッキーの保存と呼び出しの勉強をしてきてください。
ついでに、ブラウザの戻る進むでは意味がないのであしからず。
0602nobodyさん
2005/09/26(月) 22:44:25ID:???ブラウザのバックはjavascriptで消せる。
Cookieの送り方が分からないんじゃどうしようも無いがな。
0603nobodyさん
2005/09/26(月) 23:05:12ID:???http://www.google.com/search?num=50&hl=ja&q=perl+%E3%82%AF%E3%83%83%E3%82%AD%E3%83%BC&lr=lang_ja
0604nobodyさん
2005/09/26(月) 23:07:24ID:???レスありがとうございます。
最近cookieの勉強を始めたばかりなので、ほんとに基本しか知らないのですが、
この場合は、NAME= 値(たとえば1)、 print "path=", "/page2 "; でpage2に値を持たせて。。
戻ったときにエラーを出す方法がよくわからないのですが。。。勉強不足ですいません。
0606nobodyさん
2005/09/26(月) 23:45:44ID:???いやいや、俺始めてクッキーを知った日に応用は出来なかったけどそれぐらいの事は出来たが・・・・
まぁ>>601氏の言うようにブラウザの戻るはキャッシュがほとんどなので(略
0607nobodyさん
2005/09/27(火) 09:58:18ID:???http://perldoc.jp/docs/modules/CGI-Session-3.11/Tutorial.pod
http://perldoc.jp/docs/modules/CGI-Session-3.11/Session.pod
これでセッションは、だいたい分かると思うけど。
0608nobodyさん
2005/09/27(火) 23:34:13ID:1E14u9Kmこれがおかしな挙動を見せるのでググってみたところ、
%は%%でエスケープすることを学習したのですが、
$sql =~ s/(\\|\'|%%|\,)/\\$1/g;
こうした場合、「%」1つの入力であれば正常にエスケープされるように
なってのですが、「%%」と入力するとなぜか\\%%になってしまいます。
ご教示いただけますと非常に助かります。
0609nobodyさん
2005/09/27(火) 23:41:28ID:???$sql =~ tr/\'%,/\\\'\%\,/;
それと安易にエスケープするな\Q使え
0610nobodyさん
2005/09/27(火) 23:56:08ID:???早速のご返答有難うございます。
しかし、「\\\\\'''''%%%%%」と入力したところ、
「\\\\\\\\\\'''''%%%%%」となりました。
前の\のみエスケープされているみたいです。
0611nobodyさん
2005/09/28(水) 00:02:13ID:???$sql =~ s/\Q(\\|'|%|,)\E/\\$1/g;
これですと
「\\\\\'''''%%%%%」は「\\'''%%%%%,,,,,」になってしまいました。。
0612nobodyさん
2005/09/28(水) 00:07:50ID:???0613584
2005/09/28(水) 00:12:25ID:???LWP・・・。
プロレス団体みたいですね。
0614nobodyさん
2005/09/28(水) 00:14:48ID:???0615nobodyさん
2005/09/28(水) 00:46:08ID:???よくわかりませんが、
$sql =~ s/(\\|\'|\\%|\,)/\\$1/g;
にすることによって解決しました。
お騒がせしました。
0616nobodyさん
2005/09/28(水) 00:47:05ID:???0617nobodyさん
2005/09/28(水) 01:02:47ID:MTwQib0M15桁(1÷3の場合は小数第14位)までしか計算出来ないようです。
例えば、1 / 3 を計算すると、
0.33333333333333 となってしまいます。
例えば、1 / 3 の結果を 100桁で出力させたい場合は、
小数第5000位で割り切れる割り算の答えを正確に (= 小数弟5000位まで) 出力したい場合には
どのようなコードにすれば良いでしょうか?
ご教示お願いします。
0618nobodyさん
2005/09/28(水) 01:03:41ID:???正) 例えば、1 / 3 の結果を 100桁で出力させたい場合や、
間違えました。申し訳ありません。
0620nobodyさん
2005/09/28(水) 08:23:08ID:???use bignum;
bignum->div_scale(100);
my $x = 1.0;
print $x/3, "\n";
bignum->div_scale(5000);
my $y = 1.0;
print $y/7, "\n";
0621617
2005/09/28(水) 17:07:26ID:???ご教示ありがとうございます。
実際にやってみたら正常に動作しました。
div_scale(); で無限に計算を続けるようになるとおもったら
数百桁までしか計算されていないようなので、
div_scale(1000000000000000000) みたいに馬鹿でかい数をいれたら
期待通りに動作しました。
0622nobodyさん
2005/09/29(木) 09:36:51ID:???<head><title>test</title></head>
<body>test</body>
</html>
上のようなHTMLファイルを読み込んで、
gzip圧縮してブラウザにかえすCGIを作っています。
gzip圧縮する部分はネットの記事を参考に出来たのですが
HTMLを読み込んでCGIに出力させるにはどうすればよいでしょうか。
0624nobodyさん
2005/09/29(木) 10:05:50ID:???質問の意味がよく分からんが、
print <<END;
<html>
<head><title>test</title></head>
<body>test</body>
</html>
END
でいいのでは?
0625nobodyさん
2005/09/29(木) 10:16:37ID:???local $/;
open(F, "fuckyou.html") || die "why don't you fuck?"
my $buf = <F>;
close(F);
return $buf;
}
こーゆーことをしたいとかじゃなくて?
こんな基本すら書けない人間が gzip とか言ってるのってありえんとおもた。
0626nobodyさん
2005/09/29(木) 10:26:27ID:???http の レスポンスヘッダを返さないと。
>>622
print "\n", `cat hoge.html`;
0628nobodyさん
2005/09/29(木) 13:45:10ID:???use CGI
cgi = new CGI
(formの値をどうたらこうたら)
(メイン演算)
print "Content-type: text/html\n\n";
print "<html>\n";
(演算結果をprint)
print "</html>";
という感じのPerlのCGIがたくさんあるのですが、
一つだけHTMLソースがベタ書きで出てしまいます。
Win IE ではちゃんと見えるのですが、Mozilla でソース丸見えです。
他も同じように作ってるつもりなのに、なぜこれだけ失敗するのかわかりません。
何か勘所ありましたらお教えくださいませ。 よろしくお願いします。
0634nobodyさん
2005/09/29(木) 14:20:46ID:???HTMLがテキストで見えるのなら、Content-typeが上手く出力されてないと思われ。
出力されてるヘッダを確認。
0635nobodyさん
2005/09/29(木) 14:21:56ID:???その次に、確認方法きぼんぬ。とかね。
0636nobodyさん
2005/09/29(木) 14:49:09ID:???perlをローカルにインスコしてるなら、lwp-requestコマンドが使えるので、コマンドラインから
lwp-request -e -d http://example.net/
という感じでアクセス。
0637nobodyさん
2005/09/29(木) 14:50:07ID:???演算部分をカットしても表示変わらず。
もっかいよく見てみます どうもありがとうございました。
0638nobodyさん
2005/09/29(木) 15:14:00ID:???0639nobodyさん
2005/09/29(木) 19:45:41ID:???0640nobodyさん
2005/09/29(木) 20:02:55ID:???0641nobodyさん
2005/09/29(木) 20:33:30ID:???p2 とか見てると、芸術的なすぱげっちーだし、
> たくさん cgi ファイルがある設計がどうかしていると思われ。
って感じだしなぁ。
0642639
2005/09/29(木) 21:56:36ID:???ほらほら、いちいち噛み付かない。
「みんな」ってのは、「ダメなやつはみんな」という意味だ。
そう書けば満足かな?
もっとも、新規にダメなやつが参入してくるから、あんまり
状況は変わってないが。
> たくさん cgi ファイルがある設計がどうかしていると思われ。
うん。一つ一つは正しそうに動くのに、全体を流すとつじつまが
あわなかったりしてね。まあ、きちんと管理できるなら、小分けに
したほうがいいという考えもありだとは思うけど。
0643nobodyさん
2005/09/29(木) 22:00:27ID:???あわなかったりしてね。まあ、きちんと管理できるなら、小分けに
したほうがいいという考えもありだとは思うけど。
テキストエディターのスクロールバーがちっこくなって、
編集時のスクロールでドラッグしにくいので、
用途や動作内容に分けて分割してる。
0644nobodyさん
2005/09/30(金) 00:31:42ID:???手前で$!を見てみたところ、Bad file descriptorと出てきて、その原因が分からなくて困っています。
Bad file descriptorはどんな状態のときに出るのでしょうか。
色々試したところ、 require 'hoge.pl'; (hoge.plは自前のもの)を削ると上記のエラーが出なくなるのですが、
hoge.plの中身を削って行ってもエラーが消えません。
requireに制限でもあるのでしょうか。
http://e-words.jp/w/E38395E382A1E382A4E383ABE38387E382A3E382B9E382AFE383AAE38397E382BF.html
これを見てもどこで何が起こっているのか見当が付きません。よろしくお願いします。
0645nobodyさん
2005/09/30(金) 00:54:07ID:EO7sC93p0646644
2005/09/30(金) 01:20:52ID:???しかしBad file descriptorが出たままなので気味が悪いです。一体何が問題なのでしょうか。
0647nobodyさん
2005/09/30(金) 03:16:19ID:???一般的にどのようなコーディング方法がありますか?
0648nobodyさん
2005/09/30(金) 03:56:57ID:???>>647
携帯でPerlを動かすのは聞いたことがないのでCGI用途とすると、
スクリプトはサーバ側の環境に依存するから自由にコーディングできる。
あとは問題なるかも知れないHTTP(リクエスト/レスポンス)ヘッダと問題になりそうなキャリア特有のhtml(chtmlとかhdml)。
前者はPerlに限ったことじゃないし、後者は板が違うね。
0649nobodyさん
2005/09/30(金) 08:41:28ID:???> ほらほら、いちいち噛み付かない。
>>641 を噛み付ついている状態であるとみなしているくせに、
どーして、そんな噛み付いているやつに、噛み付くのだろう。
> うん。一つ一つは正しそうに動くのに、全体を流すとつじつまが
> あわなかったりしてね。まあ、きちんと管理できるなら、小分けに
> したほうがいいという考えもありだとは思うけど。
ちゃんとした設計してれば、「小分け」の状態が良いと思われ。
>>648
> 優勝記念マジレス
板が違うね。
0650647
2005/09/30(金) 10:13:27ID:???0651nobodyさん
2005/09/30(金) 10:18:00ID:???理想的に「小分け」された状態ってのは
「cgi」がたくさん小分けに作られるという意味ではないよね?
0652nobodyさん
2005/09/30(金) 14:09:04ID:???0653nobodyさん
2005/09/30(金) 14:54:58ID:???フレームワーク厨が暴れる前の発言では、
小分け == cgi たくさん
が成り立ってるっぽいので、何とも言えないのでは?
0655nobodyさん
2005/09/30(金) 17:05:31ID:kGP+cAoIいちいち噛み付かない。
0656nobodyさん
2005/09/30(金) 17:12:02ID:???ちゃんとした設計をしているなんて前提条件なかったじゃん。
後出しジャンケンっぽくて、ちょっとイヤーンだぞ。
そもそも、
> ちゃんとした設計してれば、
という前置きがつけば、何でも正当化できる。
『ちゃんとした設計をしていれば、○○の状態がよい』は、
無敵であるがゆえに、何も語っていないのと同じ。
0657nobodyさん
2005/09/30(金) 20:15:08ID:???異なる性質のものを同じにしたいのですか?
0658nobodyさん
2005/09/30(金) 20:19:04ID:???>
> という前置きがつけば、何でも正当化できる。
ほう、何でも正当化できるんですか。それはすごい言葉ですね。
今回の小泉タン違憲問題も「ちゃんとした設計してれば、」をつけて
正当化の程よろしくおながいします。
0659nobodyさん
2005/09/30(金) 20:37:17ID:???0660nobodyさん
2005/09/30(金) 20:42:25ID:ue8bjOg50661nobodyさん
2005/09/30(金) 21:04:35ID:???0662nobodyさん
2005/09/30(金) 22:49:26ID:???彼女が医療関係の学校に通ってるんだが、実習か何かで精神
障害者の施設へ行ったそうなんだ。それが終わって会った時に、
単なる会話として「大変だった?」とか訊いてたら、「あなたと同じ
本を読んでる患者がいた」って言うんだよ。隠してあったエロ本が
見つかったのかと動揺してたら、「あれだよ、表紙に動物の絵が
書いてあるコンピュータの」って言うから、オライリーのを順番に
見せていったら「それそれ! ラクダのやつ」だって。
施設の人が言うには、その患者は絶対にその本を手放さないし、
取り上げると錯乱するからずっと持たせてあるんだってさ。
0663nobodyさん
2005/09/30(金) 23:10:31ID:???0664nobodyさん
2005/09/30(金) 23:23:25ID:???0665nobodyさん
2005/09/30(金) 23:43:37ID:???0666nobodyさん
2005/10/01(土) 00:06:13ID:tjNKkKzJ何日考えても歯が立たない問題にぶち当たったので、詳しい人の知識をお借りしたいです!!
私がやりたいことは、textファイルのある一行を、別のデータで上書きするということをしたいです。
現在、削除する行を探すためにforeachを使っています。
私の望むイメージはこのような感じです。
-------aaaa.txtのファイル------
あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの
-------------------------
↑を
---------------------------
あいうえお
かきくけこ
さしすせそ
なにぬねの
------------------------
削除したい行を特定する部分は自分でなんとかできたのですが、肝心の削除方法が理解不足でどのようにすればいいのか分かりません。
ご教授お願いします。
0667nobodyさん
2005/10/01(土) 00:10:24ID:tjNKkKzJ私が知りたいのは、削除するためにはどのようにすればいいのか、です。
0668nobodyさん
2005/10/01(土) 00:18:13ID:???・今あるデータを配列に読み込む
・新しく作るデータを入れる配列を用意する
・消したい行だけを新しい配列に入れない
・新しい配列をファイルに書き込む
0669nobodyさん
2005/10/01(土) 00:25:11ID:???open (TXT, "<aaaa.txt");
flock (TXT, 1);
@data = <TXT>;
close TXT;
@new = ();
foreach (@data) {
if ($_ ne "たちつてと\n") {
push (@new, $_);
}
}
open (TXT, ">aaaa.txt");
flock (TXT, 2);
print TXT @new;
close TXT;
0670nobodyさん
2005/10/01(土) 00:36:22ID:???$okikae =~ s/文字/変更後の文字/g;
までは分かりましたが、
チルダやスラッシュを含む文字を置き換えるときはどうすればよいのでしょうか?
例として/~id/aaa/aaa/を/bbb/に置き換えるには??
教えてください。
0671nobodyさん
2005/10/01(土) 00:44:17ID:???エスケープ
などの言葉で検索すると幸せになれるかもしれない
0672nobodyさん
2005/10/01(土) 07:28:28ID:???なんてどこの老人が使い始めた言葉なのか知らないけど、
見るたびに気持悪くなる・・・。
0673nobodyさん
2005/10/01(土) 08:58:47ID:???0674nobodyさん
2005/10/01(土) 10:35:57ID:???■ このスレッドは過去ログ倉庫に格納されています