Perl コーディング初心者質問コーナー Part26
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/07/24 19:48ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0010nobodyさん
03/07/24 21:49ID:Wz9DxOV50011nobodyさん
03/07/24 21:56ID:wyC1cRIxPerl4までは、srandで一旦初期化する必要があったのだ
しかし5からはsrandはいらない
0012nobodyさん
03/07/24 21:58ID:???$xxxx="test";
$nameに"test"なく"xxxx"を代入したいんですが・・・。
0013nobodyさん
03/07/24 22:00ID:Wz9DxOV5有難うございました。
ところで、そのPerl4かPerl5かは、
どこで分かりますか?
0015nobodyさん
03/07/24 22:16ID:???perlのバージョンもわからずにコード書いてるのかい?
もう4は少ないだろうが、もしそうだったら大きな影響があるのだから
先にそういうことは知っておくこと
0018nobodyさん
03/07/24 23:20ID:2xdh5YDxだけロック処理をしたいんですが、
その場合にはどうしたら良いのでしょうか?
0019nobodyさん
03/07/24 23:24ID:???ttp://pc2.2ch.net/test/read.cgi/php/1024795138/
↑で聞いた方がいいかもしれない。
0020あぼーん
NGNG0023nobodyさん
03/07/24 23:54ID:???http://flex.ee.uec.ac.jp/texi/perl/perl_31.html
>>11
http://pc2.2ch.net/test/read.cgi/php/1056730690/984n
>>12
local $xxxx = 'test';
my $name;
while ((my $key, local $value) = each %::) {
${$value} eq 'test' or next;
$name = $key;
last;
}
print $name;
0025nobodyさん
03/07/24 23:58ID:???おれはいつも、
rand(time*$$)ってやってるけど。。。
0026あぼーん
NGNG0027nobodyさん
03/07/25 00:01ID:???それは意味のあるものが返ってくるのか?
じゃなくて、、、コンピューターが出せる乱数は(rand())、擬似乱数なんだ、
ということを認識していないと、おもしろいことをされる可能性がある。
0028nobodyさん
03/07/25 00:03ID:???0029nobodyさん
03/07/25 00:15ID:???Cgiで認証させるにはどうやったらいいんでしょうか?
0030nobodyさん
03/07/25 00:17ID:???0032nobodyさん
03/07/25 00:21ID:???WIndowsとはそんなに関係ないですが、CGIでよく使われるらしい
スクリプト、CGI.pmにクロスサイトスクリプティング脆弱性があるようです。
CGI 職人、あるいはCGI使われている方々は最新のバージョンに
アップデートすることを推奨します。
http://archives.neohapsis.com/archives/bugtraq/2003-07/0267.html
みなさん、大丈夫ですか
0034nobodyさん
03/07/25 01:00ID:???0035nobodyさん
03/07/25 01:02ID:???start_form()使ってないですね。
フォーム生成にCGI.pm使います?
>>12
意図がつかめない…。
具体的に何をしたいかを書くと答えが得られるかもね。
多分、ハッシュを使うと解決しそうな問題な気がする。。
0036nobodyさん
03/07/25 01:06ID:???既にデフォルトのseedは/dev/randomがあれば/dev/randomを使うようになってる。
Windowsとかだとどうしようもないけどね。
0037nobodyさん
03/07/25 01:22ID:???はフォームのデータをひらったり、クッキーを作ったりするのに
使ってたりする。
HTMLを生成するのには使ってない。。。だって
手で直接打った方が早いし、外部テンプレにしたら
もっと楽だし
0043nobodyさん
03/07/25 02:38ID:???<FILEHANDLE> while ( $count-- < 0 );
ってやったあと、tellしたら、データのバイト数分の値がでたんです。
これはFILEHANDLEで指定しているファイルを1行ずつ読んでるんだと思うんですが、
$_には入ってないみたいなんです。
いったい読み込んだデータはどこいっちゃったんでしょう。
0045nobodyさん
03/07/25 02:46ID:???0046nobodyさん
03/07/25 02:52ID:???いや、読んでない。
(正確には、読んでるけど全部捨ててるようなもの)
基本的なファイルの読み方をもう一度おさらいしてみよう。
0047nobodyさん
03/07/25 02:55ID:???004812
03/07/25 02:56ID:???0050nobodyさん
03/07/25 03:03ID:???005143
03/07/25 03:05ID:???>>45>>46
ファイルは、$/をセパレータに、なんというか、セパレータまでのデータを
1行として、そこまでを評価していくんだと思います。
その、全部捨ててるっていうのがなんというか、腑に落ちないんです。
あの、ダンプでしたっけ?PERLがなにやってるかを逐一ログに残すやつ。
それを見たら少しは理解できるとおもうんですが、
abnormal program termination
ってでちゃうんです。
困ったなあ
0052あぼーん
NGNG005338
03/07/25 03:15ID:???0054nobodyさん
03/07/25 03:22ID:???単に1行読むたびに$_に代入されるから、直前に読んだデータが上書きされてるだけ。
それが見かけ上「捨ててる」ってこと。
んでEOFまで逝っちゃうと、あとは何度読んでもundefが返ってくる。
それと、普通はwhileの条件式に<FILEHANDLE>を書いてループをまわすものだけど、
謎の変数$countでまわしてる。これは一体どこから出てきて何が入ってるのか。
腑に落ちないって、どういう結果を期待してるの?まずそれを教えてよ。
0055nobodyさん
03/07/25 03:47ID:???そのコードに入る前の $count の値が 0 以上ならば $count-- < 0 は偽。
よって <FILEHANDLE> は一度も評価されないまま while から抜けるから、
これ以前に読み込んでいないなら tell は -1 を返す筈。
$count の値が 0 未満なら無限ループ。
あと行入力演算子が $_ に自動で代入してくれるのは while の条件部に
書いた時のみ。
005638
03/07/25 03:54ID:???なんとなくで、分かりにくい説明ありがとうございました。
005754
03/07/25 03:55ID:???>書いた時のみ。
あ、ほんとだ。リファレンス本見たらそう書いてあった……
おいらも適当なこと言ってすまんかった。反省。そしてありがとう。
0058nobodyさん
03/07/25 04:08ID:???まじめにやれや
005938
03/07/25 04:21ID:???0060nobodyさん
03/07/25 04:22ID:4OBr2CQnニーノさんのホームページ作り2
http://ex.2ch.net/test/read.cgi/entrance/1059029010/
ニーノ ◆p9GipySMGk によってラウンジにたてられたこのスレで、
http://page.freett.com/ninogumi/
【ニーノさんのホームページ】
というサイトが作られた。(現在もコンテンツは爆発的に増えてるよ。)
さぁ、君もアイディアを出して、2CHネラーだけの最強サイトをつくろう!
祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り
0061nobodyさん
03/07/25 04:29ID:???$lolita = <FILE>;
こういうコードがどういう動きをするか理解しないとだめだ
0062nobodyさん
03/07/25 05:11ID:???左の値が同じなら、右の値の大きさの順に並べるプログラムを作ろうと思うのですが
ヒントをください。
"1<>9"
"2<>3"
"8<>4"
"2<>8"
"8<>8"
を
"8<>8"
"8<>4"
"2<>8"
"2<>3"
"1<>9"
と並び替えるようなものです。
0063nobodyさん
03/07/25 05:28ID:???http://m-factory.zone.ne.jp/perl/SchwartzianTransform.html
http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/199909/mgp00039.html
@sorted_data = map $_->[0],
sort { $b->[1] <=> $a->[1] || $b->[2] <=> $a->[2] }
map [ $_, split /<>/ ],
@data;
006443
03/07/25 07:30ID:???すみません。説明不足でした。
やりたいのは、ファイルの読み飛ばしです。
$count=10だとすると、
11行目以降のファイル内容を取得することなんです・
<FILEHANDLE> while ( $count-- < 0 );
としたあとで、
push(@line,scalar(<DAT>)) while($line-- > 0); #$lineは$count以降の取得したい行数
ってやると、ちゃんと11行目以降の内容が@lineにはいるんです。
つまり<FILEHANDLE>に対するファイルポインタは、巻き戻ってないから、それを
逆に利用してるんだそうです。
で、腑に落ちないのは
>あと行入力演算子が $_ に自動で代入してくれるのは while の条件部に
>書いた時のみ。
ってところで、$_に代入しなきゃどこに入れてるんだ、っていうことです。
PERLの、なんというか一時記憶領域みたいなものに入れてるんでしょうか。
あと、$_に代入しない場合でも、やっぱり1行ずつ読んでるんですよね???
結果はいいけと、PERLがやってることがなんとなくでも理解できないと、
応用できないんかなって。
0065あぼーん
NGNG0066あぼーん
NGNG…これで動いてるって?
既に>>55で指摘されてるけど、比較演算子が逆じゃない?
| ってところで、$_に代入しなきゃどこに入れてるんだ、っていうことです。
| Perlの、なんというか一時記憶領域みたいなものに入れてるんでしょうか。
そうだよ。
<FILEHANDLE>ではなく、readline(FILEHANDLE)と関数呼び出しとして書くと分かるかな?
ついでに言うと、print()とかも成功/失敗を知らせる値を返してる。
大抵は必要ないから即座に捨ててるだけで。
0068nobodyさん
03/07/25 14:14ID:???最初からその2行のコードと説明してくれれば早かったのに。
$_ を気にしてるようだが、$_ には読み込まれないから考える必要はない。
scalar(<DAT>) ← これがミソで、リストである<DAT>を強制的に
スカラとして評価することによって<DAT>の1行だけを取得しているので
ここでは1行読み込みみたいな動きになる。
0069nobodyさん
03/07/25 14:37ID:???0070nobodyさん
03/07/25 15:12ID:???0071nobodyさん
03/07/25 15:26ID:???【犯行】明日入殺します【予告】
ttp://ex.2ch.net/test/read.cgi/entrance/1059109904/l50
0072nobodyさん
03/07/25 15:27ID:???なんでリストなんて書いちゃったんだろ
0073nobodyさん
03/07/25 16:09ID:ysQnpLo4対象文字列の扱いに困っております。
$htmlの中に「表」等の文字が入っている場合、
$html =~ s/5C/5C5C/sig;
これで回避できるかと思ったのですが、どうもうまくいきません。
教えていただけたら幸いです。
0074nobodyさん
03/07/25 16:15ID:???0075nobodyさん
03/07/25 16:45ID:???お返事有難うございます。
早速下記のようにやってみましたが、まだいかないようです。
$html =~ s/\x5c/\x5c\x5c/sig;
初心者で申し訳ないです、、、
0077nobodyさん
03/07/25 17:06ID:???007873
03/07/25 17:23ID:???$htmlは、ヒアドキュメントを使って内部に変数が含まれて
いるため、シングルクォーと等は使えません、、、
再度しばらく考えてみます、、、
0079nobodyさん
03/07/25 17:36ID:???表\示
でいいじゃん。
008073
03/07/25 17:48ID:???「表」や「能」等を平気で普通に使ってしまう可能性が
あるため、最後にまとめて変換してしまおうと考えました。
出力形式は要望であるため、変えられないのが痛い
です、、、
008273
03/07/25 18:00ID:???それが許されないからヒアドキュメントなのです。
できればそうしたいのですが、ロードバランサーを使用した
サーバ3台体勢なため、どんなに説明しても1ファイルで
完結してくれと、、、
すみません、無駄にスレ消費させているので書き込み自粛
します。
0085nobodyさん
03/07/25 20:25ID:cdWg8/H5表示されるのに、これでは画像が×印になってしまい
表示されません。何が抜けているのか何でも良いので
気付いた所を教えて欲しい。
sub wedd{
if(!$tpre){
$log .= "<img src=''$imgs/seee.png''><br>\n";
$tm=0;
$trpe='';
}
です。
0087nobodyさん
03/07/25 20:37ID:???0090nobodyさん
03/07/25 21:46ID:???0092nobodyさん
03/07/25 22:04ID:???ダブルクォーテーション内のシングルクォーテーションを、しかも2個の内一つだけエスケープして意味あるのか?
>85はただの間違い探しだろ。
0093nobodyさん
03/07/25 23:21ID:???これで何点貰えるのかなぁ。
0094nobodyさん
03/07/25 23:31ID:uJCpPyXD0095nobodyさん
03/07/25 23:32ID:uJCpPyXDの間違いだ。スマソ
0096nobodyさん
03/07/25 23:44ID:???009885
03/07/25 23:59ID:qXznWoh0おお!
とりあえず、それで出来ました。
これで道は開けます。
どうも有り難うございました。
009943
03/07/26 00:58ID:???ありがとうございました。そうかreadlineか。PERLFUNCを読み直して
すっきりしました。
比較演算子は逆ですね。($count-- > 0)ですよね。
0101nobodyさん
03/07/26 03:55ID:4h1zCzy4perl5.003の環境で使う状況になってしまいました、
5.003で使えない表現を纏めるにはどこをみれば良い
でしょうか?
また、HTML::Templateをつかいたいのですが、
対応していない表現が多いようで使えません。
書き換えることでつかえるようになるでしょうか?
0102あぼーん
NGNG0104あぼーん
NGNG0105あぼーん
NGNG0106nobodyさん
03/07/26 11:25ID:NdYn8w9o思っております。
昔C言語を少しだけ使っておりまして、その習性に引きずられてか、htmlを作るときは
何となくインデントさせていました。例えば
<HEAD>
<META HTTP-EQUIV="content-type" CONTENT="text/HTML;charset=euc-jp">
<TITLE>title</TITLE>
</HEAD>
の様にですね(無駄といえば無駄なんでしょうけど…)。
そして上記のhtmlをperlで出力させる際には、
#!/usr/bin/perl
print " <HEAD>";
print " <META HTTP-EQUIV=\"content-type\" CONTENT=\"text/HTML;charset=euc-jp\">";
print " <TITLE>title</TITLE>";
print " </HEAD>";
等と書いてインデントされた状態のhtmlが出力されるようにしていました。
しかしif文やfor文内にてhtmlを出力する処理となった場合等、perlのソースを
インデントさせて、そこでまたさらにインデントされたhtmlを出力するために
文字列を記述していくと、なんだか非常に見づらいソースになってしまうように
感じてしまいます(ソース内でhtml部分のインデントが一致しない等)。
今後メンテするのはperlのソースなので、perlのソースとして読みやすいものにすれば
よいと思うのですが、かといって出力であるhtmlが読みづらいとメンテが大変であるとも
思います。皆様どのように考えて作られてますでしょうか?
0107106
03/07/26 11:42ID:???> print " <HEAD>";
print "<HEAD>";
ですね。
ソースからコピペして、インデントを全角スペースにする時に間違えました…
0108nobodyさん
03/07/26 11:46ID:???0109nobodyさん
03/07/26 12:01ID:???ループとかでテーブル生成、とかそーゆー時は、出力したところが見やすいようにする。
で、最終的にプログラムが完成し、出力するHTMLが意図した通りになったのを確認したら、
出力時のタブや改行などは全部消す(出力直前に正規表現で)。
文字のスペースは全て&nbsp;を使ってるからスペースも消す。
■ このスレッドは過去ログ倉庫に格納されています