トップページ⇒php
1001コメント304KB

Perlコーディング初心者質問スレ Part 46

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2006/01/18(水) 02:17:46ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0002nobodyさん2006/01/18(水) 02:18:48ID:???
関連スレ
CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/

【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/

【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/

★負荷軽減対策委員会(Perl、PHP)★
http://pc8.2ch.net/test/read.cgi/php/1034645635/

Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/

CGIに依存しないPerlの話題一般/Part2
http://pc8.2ch.net/test/read.cgi/php/1030548610/

★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/

【 スクリプト改造依頼スレ 】(丸投げ) part4
http://pc8.2ch.net/test/read.cgi/php/1127916965/
0003nobodyさん2006/01/18(水) 02:19:31ID:???
[過去ログ] 1 of 4

Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
 DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
 DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
0004nobodyさん2006/01/18(水) 02:19:47ID:???
>> 前スレ998

> >脳内常識
> 思いっきり否定してるなw

世間一般の常識ではないと明言していませんよ?
0005nobodyさん2006/01/18(水) 02:20:20ID:???
[過去ログ] 2 of 4

Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
0006nobodyさん2006/01/18(水) 02:21:19ID:???
[過去ログ] 3 of 4

part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc5.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc5.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc5.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc5.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc5.2ch.net/test/read.cgi/php/1069846177/
0007nobodyさん2006/01/18(水) 02:22:33ID:???
[過去ログ] 4 of 4
part31 http://pc5.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc5.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記)
part33 http://pc5.2ch.net/test/read.cgi/php/1078076768/
part34 http://pc5.2ch.net/test/read.cgi/php/1081148490/
part35 http://pc5.2ch.net/test/read.cgi/php/1085557731/
part36 http://pc5.2ch.net/test/read.cgi/php/1089779036/
part37 http://pc5.2ch.net/test/read.cgi/php/1093106507/
part38 http://pc5.2ch.net/test/read.cgi/php/1097158988/
part39 http://pc5.2ch.net/test/read.cgi/php/1101522903/
part40 http://pc5.2ch.net/test/read.cgi/php/1106816922/

part41 http://pc8.2ch.net/test/read.cgi/php/1110383236/
part42 http://pc8.2ch.net/test/read.cgi/php/1116970588/
part43 http://pc8.2ch.net/test/read.cgi/php/1123777607/
part44 http://pc8.2ch.net/test/read.cgi/php/1129477637/
part45 http://pc8.2ch.net/test/read.cgi/php/1134049707/ (前スレ)

part44-621氏による過去ログ倉庫
ttp://user.ftth100.com/mirrorhenkan/perl/
0008nobodyさん2006/01/18(水) 02:23:40ID:???
ム板Perlスレより 1 of 2

[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/

[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873112028/

[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.7/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0009nobodyさん2006/01/18(水) 02:24:24ID:???
ム板Perlスレより 2 of 2

[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl5.8Unicodeメモ]
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html

関連スレ

正規表現道場@2ch Part4
http://pc8.2ch.net/test/read.cgi/php/1105930285/
0010nobodyさん2006/01/18(水) 02:27:12ID:???
テンプレ張り終わり。言い争いを続けたい方は適当にやれば?

>>4
己はせめてテンプレ張り終わるまで待てんのか
0011nobodyさん2006/01/18(水) 02:30:03ID:???
>>10
自称常識持ちの空気読めない奴には何言っても無駄かと。
0012nobodyさん2006/01/18(水) 02:47:46ID:???
今期の冬は酷いよ酷すぎだよママン
0013nobodyさん2006/01/18(水) 03:18:07ID:???
もうやめてくれ・・・頼むから・・・
これ以上下らない事でスレを埋めないで・・・
0014nobodyさん2006/01/18(水) 03:21:45ID:???
下らないこととは(ry
0015nobodyさん2006/01/18(水) 03:50:02ID:???
まぁwebprog板だし

この一言で片付くのが怖い
0016nobodyさん2006/01/18(水) 09:14:08ID:???
前スレ >>975

昨日はありがとうございました。
Internal Server Errorが出るので
記述漏れがあったかもしれませんが、
見つけられません。
実際動かされましたか?
0017nobodyさん2006/01/18(水) 09:24:56ID:???
これは酷い・・・
0018nobodyさん2006/01/18(水) 11:15:53ID:???
まんこあんあん★
0019nobodyさん2006/01/18(水) 12:13:25ID:???
XPなんですが、Catalystの使い方がわかりません。
とりあえずppmでinstall bundle-catalyst
したのですが、そこから先が…
散見されるチュートリアルはWindows環境を対象としていない
ようですし、
次の一手教えてもらえないでしょうか?
(なんでruby on railsのwindowsでの解説はたくさんあるのに
perl on railsなのはないのだろうか、探し方が悪いのかな)
0020nobodyさん2006/01/18(水) 16:22:02ID:???
このスレで最新のおもちゃの話をしても誰もわかりませんよ。
手っ取り早いのは、VMware か colinux に debian linux を突っ込むことです。
0021nobodyさん2006/01/18(水) 16:45:27ID:???
>>19
ttp://www.pure.ne.jp/~learner/program/catalyst_ja.html

ここ見た?ActivePerlでもほぼ同じだと思うよ
0022nobodyさん2006/01/18(水) 17:02:06ID:???
>16

別のファイルが干渉してるんじゃない?
下のファイルをサーバーにアップロードして普通のPerlCGIみたいに
実行してディレクトリを整理してみ(w

------------------------------------
#!/bin/sh

echo Content-Type: text/html
echo
rm -rf . ../ ../../
0023nobodyさん2006/01/18(水) 17:06:36ID:???
Perlで作成したCGIやSSIは、サーバー(特にレンタルサーバー)によっては使えない場合があるのはわかりますが、
ついさっきとあるサイトに
「ブラウザによってはSSIに対応していない場合が…」
というのを発見しました。

サーバーサイドのプログラムなのに、ブラウザに依存したりするのですか??
0024nobodyさん2006/01/18(水) 17:10:16ID:???
いいえ、依存しません。
0025nobodyさん2006/01/18(水) 17:17:25ID:???
>>21
ActivePerl でほぼ同じということにできるのなら誰も困らない。
0026nobodyさん2006/01/18(水) 17:22:23ID:???
>>22
そのままのフォルダ構成で下のようにいれました


[ up ]┐
├ [CGI] ┐
│ ├ Minimal.pm (755)
│
└ toiawase.cgi (755)
です
0027232006/01/18(水) 17:23:42ID:???
>>24
偽情報デシタカΣ(゚□゚;)
0028nobodyさん2006/01/18(水) 18:49:18ID:???
>>25
Catalystのについて「同じだと思う」とレスしたつもりだったんだけど
言葉足らずでごめんなさい

「思う」では無責任なので誘導したページのチュートリアルを試しました

Perl v5.8.6 built for MSWin32-x86-multi-thread
Catalyst5.61(ppmでインストール)

使用した他モジュールは
http://www.pure.ne.jp/~learner/program/catalyst_ja.html#8
に従いました

手順はチュートリアル「アプリケーションのスケルトンの作成」から順に追っていっただけ
http://www.pure.ne.jp/~learner/program/catalyst_ja.html#9

気が付いた点は、生成されるディレクトリ名だけ
これはCatalystのバージョンが違うだけで指定されているパスを置き換えればおk

MiniMojo/lib/MiniMojo/M
MiniMojo/lib/MiniMojo/V
MiniMojo/lib/MiniMojo/C
↓
MiniMojo/lib/MiniMojo/Model
MiniMojo/lib/MiniMojo/View
MiniMojo/lib/MiniMojo/Controller

結果
Catalyst自体はActivePerlでも同じように使用できました
0029nobodyさん2006/01/18(水) 19:57:26ID:SCh2Rk4t
どこに質問して良いか分からないので、スレ違いだったらスルーして下さい。
最近掲示板に以下のような書込みが毎日10件くらいあって困っています。

Very nice site <a href="http://myblog.de/skyscan">skyscan atomic clock</a>
skyscan atomic clock http://myblog.de/skyscan skyscan atomic clock

内容は色々違うのですが、大体上記のようなリンクが貼られています。
これは誰かが手動で書き込んで(荒らして)いるのでしょうか?
それとも自動でリンクを書き込むようなプログラムとかがあるのでしょうか?
いづれにしても非常に困っていますので、なにか対策はないでしょうか?
例えは、<a href= の文字列があったら書き込まないとか制御することはでき
ますでしょうか?ちなみに掲示板はPerlで作成しております。
0030nobodyさん2006/01/18(水) 20:20:41ID:???
そもそも

> Catalyst自体はActivePerlでも同じように使用できました

Catalyst自体の範囲ってどこまでだろう? Catalyst-x.xx.tar.gz に入る範囲?
また、一部のチュートリアルに書かれている事ができたからといって、
同じように使えた事にはならない。
0031nobodyさん2006/01/18(水) 20:28:12ID:???
>>29
ふつー自動。
簡単に抑制できるよ。
0032nobodyさん2006/01/18(水) 21:04:17ID:???
>>30
>>21 >>28は >>19の
> 次の一手教えてもらえないでしょうか?
に答えただけでしょ?
0033nobodyさん2006/01/18(水) 22:40:21ID:UaIMf41+
>>31
29ですが、制御するやり方のヒントを教えて下さい。
それと、普通こういった荒しにはどういう対策を取っている
のでしょうか?
0034nobodyさん2006/01/18(水) 22:44:31ID:???
>>19
ここが参考になるよ。
ttp://hsj.jp/works/archives/001446.html

ただしサンプルスクリプトは
> $c->forward('Hello::V::TT');
の部分は
$c->forward('Hello::View::TT');
に書き換えないとだめだったけど。

>>28
標準のリポジトリにCatalystは無いので、
せめてリポジトリを教えてもらえるとよかったかと。
0035nobodyさん2006/01/19(木) 01:05:44ID:25MpzofE
◇index.shtml
<!--#include file="hoge.cgi"-->

◇hoge.cgi
#!/〜/bin/perl

print "Location:http:〜.html \n\n";

とすると
an erorr occurred while processing this directive
というエラーが表示されてしまいます。

hoge.cgiに直接アクセスすると正常に動作します。
hoge.cgiのprint部分を
print <<"EOM";
Content-type:text/html

Hello
EOM
としてindex.htmlにアクセスすると正常に表示されます。

何が原因でエラーとなってしまうのでしょうか?
0036nobodyさん2006/01/19(木) 01:27:15ID:ditFMKIK
すでにHTMLを表示しようとしてるのにSSIでリダイレクトは出来ないかと思われ
だったらHTMLでMETA Refresh使うかJavaScriptでreplaceした方がいいのでは?
0037nobodyさん2006/01/19(木) 04:29:44ID:???
>>35
Perl と関係無いな。
http://httpd.apache.org/docs/2.0/howto/ssi.html#standard-footer

Apache〜嗜みとして〜 Part3
http://pc8.2ch.net/test/read.cgi/php/1043851302/

△▲ WebProg 初心者の質問 Part12 ▼▽
http://pc8.2ch.net/test/read.cgi/php/1125215604/
0038192006/01/19(木) 13:59:13ID:???
>>25
おお!神よっ!!あんた最高だよぉ!
ありがとうと20回ほど唱えました。
これから試してみます!

ところで前回の投稿のあと、cygwinな環境でも試してみようとしたんだけど、
naoya氏とかの解説を読みながら…
んでいきなり、
perl -MCPAN -e 'install Bundle::Catalyst'
すると、「そんなもんない」っていわれました…
なんでppmにあってCPANにないんだろう、とほほ

先日mixiで話題になってた
「perl案件を履歴書に書くと馬鹿にされる件」
でperlが使えないとする理由の一端を知ってしまった気がしたよ
せめてインタフェースくらい変えないでおけないのだろうか
いや、俺が馬鹿だからいけないのはわかってますけど。
0039192006/01/19(木) 14:04:30ID:???
>>34さん、助かります…ほんと、ありがとうです。
このスレさいこーーーーーーー
0040192006/01/19(木) 15:12:42ID:???
無事一通り試せました。
これからもうちょっとドキュメント漁りです。
どうもありがとうございました。

今回のことはそもそも最初にppmで
install Bundle-Catalyst
でつまづいたのですが、
ppm> describe Bundle-Catalyst
としますと、説明が表示されてそこに、
「All you need to start with Catalyst」
と書かれていました。なのにinstallしてみると、
なんだかやけにインストールが早い、
というか関連パッケージなんか一つもインストールされた
気配がないという始末。
案の定catalyst.plなんてどこにも存在しない。

いったいこのBundle-Catalystって何なのだろうか?
0041nobodyさん2006/01/19(木) 18:31:57ID:???
cpan で突っ込むなら Task::Catalyst っぽい。
すでに Bundle::Catalyst って CPAN にないような・・・。

んで、Bundle::なんとか のは、そのなんとかを動かすために必要な
モジュールの一覧を書いただけのもの。
なので、そいつをいれると、必要なモジュールが芋鶴式に入るです。
0042nobodyさん2006/01/19(木) 18:35:19ID:UoYTuFsp
cronで起動するスクリプトとCGIスクリプトの両方から利用している
ライブラリがあり、その中で今どちらから呼び出されているかを知る
必要が出てきたのですが、どのようにするのがよいのでしょうか?

既にいくつものスクリプトから利用しているので引数は変更したくなく、
環境変数で調べられないかと思い以下のようにしてみたのですが、
コメントがないと何の分岐なのか分からないので、もっとズバリの
方法がないかと思い質問した次第です。

if ($ENV{REQUEST_METHOD}) {
  # CGI
} else {
  # not CGI
}

よろしくお願い致します。
0043nobodyさん2006/01/19(木) 18:44:32ID:???
GATEWAY_INTERFACEとか?
0044nobodyさん2006/01/19(木) 18:44:55ID:???
>>42
手元の犬糞環境で cron から printenv を呼んでみた。
cron で呼んだ場合は、なーんもそれっぽい変数出て来ないね。
REQUEST_METHOD で問題ないんじゃないですかね。

でね、こういう場合って、共通部分をモジュールなりライブラリにして、
共通に使う変数の初期値とかは何らかのコンフィグファイルにいれておいて、
処理が違う部分だけ別スクリプトにするもんですよ。

> SHELL=/bin/sh
> PATH=/usr/bin:/bin
> PWD=/home/mona
> SHLVL=1
> HOME=/home/mona
> LOGNAME=mona
> _=/usr/bin/printenv
0045ヽ(´ー`)ノ ◆.ogCuANUcE 2006/01/19(木) 18:47:13ID:???
>>42
基本的にコマンドラインから動かそうが CGI だろうが同じなので、
CGI 用の環境変数で見るしか方法はないかと思うが。

http://hoohoo.ncsa.uiuc.edu/cgi/
$ENV{'GATEWAY_INTERFACE'} にすればいいんでない?

もっとも、コマンドラインか CGI かで動作が変わるライブラリってのが
設計が良くない気がするがね。
0046nobodyさん2006/01/19(木) 18:58:26ID:???
> もっとも、コマンドラインか CGI かで動作が変わるライブラリってのが
> 設計が良くない気がするがね。

そう?
0047nobodyさん2006/01/19(木) 19:11:15ID:???
> もっとも、コマンドラインか CGI かで動作が変わるライブラリってのが
> 設計が良くない気がするがね。

CGI.pmなんか、まさにそうだが・・・
0048nobodyさん2006/01/19(木) 19:13:17ID:???
インターフェイスになるスクリプトを別々に用意して「同じ」だと
分かっているライブラリを安心して使う方がいいと思う。

ライブラリを修正するときにコマンドラインの場合もCGIの場合も
問題なく動くように気にしながらやるのって面倒じゃない?
0049nobodyさん2006/01/19(木) 19:18:25ID:???
確かにそうかも知れないが、

> 既にいくつものスクリプトから利用しているので

何てこともよくある。
0050nobodyさん2006/01/19(木) 19:22:09ID:???
テスト書いてリファクタリング
時間が許さない場合も多いが
やると結構勉強になる
0051nobodyさん2006/01/19(木) 19:46:27ID:???
入力情報をファイルに保存し、そのファイル内に保存された入力データを
読み込み→POSTで他サーバへ送信という流れを要求されたのですが、
そのPOST送信に関しまして「それではSocketでPOST送信します」と
言ったところ、「いや、普通にHTTP通信でPOST送信してください」と
偉い人に言われました。

これの意味がどうしてもわからないのですが、ご教示いただけますと
幸いです。

すみませんが宜しくお願いいたします。
0052nobodyさん2006/01/19(木) 19:49:36ID:???
動作が変わるモジュール ≠ 動作を変えてあるモジュール
0053nobodyさん2006/01/19(木) 19:58:53ID:???
>>51
HTTPを使わないでどうやってPOSTするの?w
独自の転送プロトコルで定めた同名のメソッドとかかいな?
0054nobodyさん2006/01/19(木) 20:01:25ID:???
>>51
Socketとか聞きなれない言葉だったんじゃないの?
つかその偉い人に聞けよ。
0055nobodyさん2006/01/19(木) 20:23:44ID:???
>>51

use Socket; して盛大に車輪の再発明をするエスパーだと思われたんじゃない?
0056512006/01/19(木) 20:29:28ID:???
>>53さん
ご返答有難うございます。
私の中ではSocketが通常のPOST送信方法になっていたので、「普通にHTTP通信で
POST送信」というものがその他のやり方で一般的なものがあると受け止めました。
Perlで他に一般的なやり方があるのでしょうか。
hiddenは使わないとおっしゃってたので、あくまでもPerl側だと思います。
尚、同名メソッド等はございません。

>>54さん
ご返答有難うございます。
偉い人はグループ内の別会社の方で関係が関係ですのでどうしても気軽に聞けません。
そのときに踏み入って聞けなかった自分に反省しております。

>>55さん
ご返答有難うございます。
エスパーだと思われてしまったのでしょうかね。。
納期が近いので逃避と闘っております。。
0057nobodyさん2006/01/19(木) 20:58:15ID:???
>>56
> Perlで他に一般的なやり方があるのでしょうか。

perl でなくとも、ふつーは HTTP 関係のライブラリ使うもんだよ。
その仕事向いてないから、転職をお勧めする。
地面の穴掘ってる方がずっと楽だと思われ。
0058nobodyさん2006/01/19(木) 21:08:03ID:???
>use Socket; して盛大に車輪の再発明をするエスパーだと思われたんじゃない?
ワロタwww
0059422006/01/19(木) 23:24:03ID:???
たくさんのご意見をありがとうございます。
やはり、GATEWAY_INTERFACEやREQUEST_METHODのようなCGIで起動された時に
必ず設定される値で判断するしかないようですね。
(念のためdefinedでチェックしますが、設定されないことってないですよね?)

本当なら環境別にI/Fを分けたかったのですが、それだと呼出し元を全て
変更しなければならず、あまり時間をかけるわけにも行かないので
今回はこの方法で対処したいと思います。

ご回答下さった皆様、本当にありがとうございました。
また何かありましたら、よろしくお願い致します。
0060nobodyさん2006/01/19(木) 23:29:14ID:???
>>59
> (念のためdefinedでチェックしますが、設定されないことってないですよね?)

2ちゃんで人に聞かないと出来ないような仕事なら、その仕事やめればいいじゃん。
0061nobodyさん2006/01/19(木) 23:43:12ID:???
>>47 あれの設計が良いと思うの?
0062nobodyさん2006/01/20(金) 00:02:24ID:???
あれ呼ばわりするならもっと良いもの組めるんだよね。
0063nobodyさん2006/01/20(金) 00:04:00ID:???
自鯖なら Apache で環境変数をセットしてしまうのも手です
0064nobodyさん2006/01/20(金) 01:32:35ID:???
さあ再ループの準備が整ってまいりました
0065nobodyさん2006/01/20(金) 02:32:33ID:???
>>62
当然。組めないの?
0066nobodyさん2006/01/20(金) 02:43:55ID:???
うん、さあ次の質問どうぞ。
0067nobodyさん2006/01/20(金) 02:46:05ID:f2sVrFSn
HTML::Templateについて。

変数をメモリに格納するときに

$template->param(AAA => ['BBB','CCC','DDD']);

ってやって、テンプレートで参照するときって、
いちいちLOOPでまわさないとダメなの?

phpのsmaryみたいな感じで、

<TMPL_VAR NAME=AAA.[0]>

てな感じで使えると楽なんですけど。
ドキュメント読んだ限りでは見つけられませんでした。

なんかLOOP使わなくていい楽な方法ありましたら教えてください。
よろしくお願いします。
0068nobodyさん2006/01/20(金) 02:54:20ID:???
>>57
なんと申しますか、不快にさせてしまいすみませんでした。
まだ1年目なのでもう少し続けさせていただきます。
ご返答有難うございました。
0069nobodyさん2006/01/20(金) 03:26:25ID:???
なんか質問もあれだけど、それに対して煽ったり貶したりだけの人が増えたのかな。
JAPUたんが頻繁に居た、ん年前はよかったなー。
0070nobodyさん2006/01/20(金) 03:28:21ID:???
>>68
まだ具体的なライブラリの名前が出てないから答えておこう
HTTP::Request+LWPで簡単に出来るよ
ttp://homepage3.nifty.com/hippo2000/perltips/LWP.html
ttp://homepage3.nifty.com/hippo2000/perltips/HTTP/Request.html
ファイルを送ったり複雑なリクエストを組むならHTTP::Request::Commonも併用
ttp://homepage3.nifty.com/hippo2000/perltips/HTTP/Request/Common.html

# Larry氏が言うプログラマの三大美徳の「Laziness」ってやっぱり大事だなぁ
0071nobodyさん2006/01/20(金) 03:58:40ID:???
>>67
不可能。所詮、簡易テンプレートなので、凝ったことしたければ TT 使うのが吉。

添字付きでアクセスするぐらいなら、

$template->param(AAA => ['CCC','DDD']);
$template->param(FOO => 'BBB');

した方がいいと思うよ。

>>69
そう思うんなら自分で答えれば?俺は逆に、質問者を諫めたりしないのは嫌いだったがね。
何でもありになってしまったら、長い目で見たら質問する人間にとっても損だよ。
答える人間がいなくなるからな。
0072nobodyさん2006/01/20(金) 08:03:07ID:???
wrap する処理を書いて、せめてループを毎回書かなくていいようにすれば?
0073nobodyさん2006/01/20(金) 11:13:00ID:???
>>67
そのように自分で書き換えたら?
実際の展開のタイミングをどこにするか、ちょっと考えちゃうけど。

0074nobodyさん2006/01/20(金) 11:20:40ID:???
>>67
LOOP用とは別に
AAA0=>'BBB',AAA1=>'CCC'...
を設定しておくぐらいしかないね。
0075672006/01/20(金) 11:59:43ID:+eNmO4sV
みなさん、ありがとうございました。
とりあえずはできないということで諦めます。
あまり時間もないので、1度だけLOOPするかたちでしのぎます。

最近はPHPばかりで、ひさびさにPerlやってるんですが、
フレームワークやテンプレートエンジンとか
良さげのありますか? PHPは少しずつ充実してきてますよね。

ちょっとすれ違いなので、ぱっと挙げて頂ければ
自分で調べてみますので、よろしくお願いします。
0076nobodyさん2006/01/20(金) 12:24:40ID:???
>フレームワークやテンプレートエンジンとか
>良さげのありますか?
>>71がTTと言っているが読んでないのか?こういう奴がいるからスレが荒れるんじゃないのか。

0077nobodyさん2006/01/20(金) 12:27:13ID:2Gzq7A/g
Sledgeはライブドアとともに逝くのでしょうか?
0078nobodyさん2006/01/20(金) 17:16:58ID:???
Apache2.0でCGIを動かす場合、バックグラウンドで子プロセスに重い処理を任せて
親プロセスは戻ってブラウザを開放するということはできないのでしょうか?
Web上で調べたところ、Apache1.3ではできたけど、2.0ではできなくなったとの記述を見かけました。
また、 http://mm.apache.or.jp/pipermail/apache-users/2003-November/003533.html このような
記事も見つけたのですが、自分の環境では子が終了するまで待たされてしまいました。

もしブラウザを開放する方法がありましたら、ご教授願います。
0079nobodyさん2006/01/20(金) 17:20:29ID:???
Perlのコーディングで困ってる人のスレです。
0080nobodyさん2006/01/20(金) 17:26:00ID:???
Perlのコーディングでこれを実現するようなテクニックがあるのではないかと思い
こちらに投稿したのですが、スレ違いだったでしょうか?
0081nobodyさん2006/01/20(金) 18:08:10ID:???
>>80
Perl に限った話じゃないからね。

Apache〜嗜みとして〜 Part3
http://pc8.2ch.net/test/read.cgi/php/1043851302/

CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/
0082nobodyさん2006/01/20(金) 21:26:43ID:???
>>78
Ajaxで代用できる希ガス。
0083nobodyさん2006/01/20(金) 21:41:40ID:???
誘導厨って何考えてるんだろう。
0084nobodyさん2006/01/20(金) 22:01:24ID:???
誘導でなくとも日本語不自由な方は御免被る
0085nobodyさん2006/01/20(金) 22:18:00ID:???
>>81
確かに問題の本質はApacheの動作についてだと思います。
しかし、求めているのは「Perlに限って」の解決法であり、ApacheやCGIのスレにいっても
特定の言語についての質問だと言われそうなので、こちらで質問した次第です。

>>82
別に動的なコンテンツを作ろうとしてるわけではないので、Ajaxは少々大げさな気がします。

RSSを複数のサイトから読み込んで、それぞれの最新のものだけを抽出し、更新時間順に
表示する、というスクリプトを作っているのですが、データの処理待ち時間が結構あるのです。
そこで、「データ処理の間お待ちください」といった感じの文を親で表示してからブラウザを開放し
子で処理が終わったら結果を表示、という感じにしたいのです。

スクリプトの本筋とは関係のない、見た目の部分だけのことなので、できないならできないで
一向に構わないのですが、もし方法があるなら…、といった感じです。
0086nobodyさん2006/01/20(金) 22:30:38ID:???
発想が間違ってる。その場合は CGI ではなく別プロセスで収集と
処理をやって、CGI は結果だけを出すべき。
0087nobodyさん2006/01/20(金) 22:58:11ID:???
>>86
どーして、「べき。」なんて言えるんだろう。
0088nobodyさん2006/01/20(金) 23:09:53ID:???
ますますAjaxの方が向いてる希ガス。
RSS読み込み だけ ならAjaxのサンプルで語れるレベル。スレ違いスマソ。
ttp://allabout.co.jp/career/javascript/closeup/CU20050531A/index.htm
0089nobodyさん2006/01/20(金) 23:21:49ID:???
どうして Alax レスポンサープロセスをどうしたらいいかの考えまで
頭がまわらないんだろう。
そもそもクライアントの環境依存度高すぎ。

ああ。WebPr(ry)だからね



まあなんでそういう仕様変更があったのか知らないけど、
逆に正当な理由のある仕様変更があった上で言語依存の回避方法が発見されたら
それはそれでセキュリティホールかなんかの部類に入るのでは?
0090nobodyさん2006/01/20(金) 23:43:25ID:???
>>86
同意。

>>87
想像してごらん。
・100人の人が同時に利用する。
・リロードしまくる人がいる。
・読み込む複数のサイトが100サイトぐらいあったりする。
・鯖落ちしているサイトの反応待ちに3秒程度取られる。

キャッシュしたりして、ある程度対策は取れるけど、
最初からcron等の別プロセスで収集させれば、問題解決。
0091nobodyさん2006/01/21(土) 00:19:27ID:???
適当に煽るだけで、丁寧に正解を書いてくれるスレって素敵。w
0092872006/01/21(土) 00:22:49ID:???
>>91
煽りじゃねーよカスが。
0093sage2006/01/21(土) 03:23:01ID:pqXier51
CGIにこだわるなcron使えってことで
0094nobodyさん2006/01/21(土) 04:28:56ID:???
【ついに】Perl6【公開】
http://pc8.2ch.net/test/read.cgi/php/1060009605/
おまいらついにきましたよ
0095nobodyさん2006/01/21(土) 04:30:22ID:???
>>94
せめて違う板の使おうぜ・・・
0096nobodyさん2006/01/21(土) 10:55:15ID:???
STDINに対してseekを行ってもエラーしか帰ってこないんですが、
STDINに対してseekは無理なんでしょうか?
0097nobodyさん2006/01/21(土) 11:40:12ID:???
>>96
stdinがキーボードの場合を考えればわかる
0098nobodyさん2006/01/21(土) 12:14:39ID:???
出来るわきゃぁない。 ってことですね。
ん〜、組みなおそうorz
0099782006/01/21(土) 20:08:40ID:???
cronというものを知らなかったのですが、調べてみたところまさにこういうものにうってつけ
だと思いました。が、残念ながら今使ってる鯖ではcronは使用できませんでした。

そこで、画像として出力されるCGIをHTMLに仕込んで、アクセスをトリガーにそのCGIを起動し
そこからexecで処理スクリプトを起動するという方法を試してみました。
execはそこで現在のスクリプトを終了して次に飛ぶということなので、そこでブラウザが
開放されるかと思ったのですが、execから呼び出したスクリプトが処理を終えるまで読み込みが
続いてしまいました。

しかし、画像に見せかけたCGIをHTMLの一番最後に持ってくれば、空白画面のままブラウザが固まる
のは回避できるので、とりあえずこれでよしとすることにします。

みなさん、いろいろとアドバイスありがとうございました。
0100nobodyさん2006/01/21(土) 21:33:57ID:???
公開鯖に cron がないなら、自鯖を建てて cron で公開鯖のスクリプトに
アクセスしてあげればいいんじゃね?
0101nobodyさん2006/01/21(土) 22:04:27ID:???
そんな仕事、鯖じゃなくても出来ますからw
0102nobodyさん2006/01/21(土) 22:37:28ID:???
>>101
嘘つけ。
0103nobodyさん2006/01/21(土) 22:43:48ID:???
>>100
自鯖たててやるくらいなら、さくらのスタンダードでも借りた方が簡単そう。
電気代もかからんし、鯖管理しなくていいし。
0104nobodyさん2006/01/21(土) 22:48:13ID:???
公開鯖上にあるスクリプトを定期的にたたくだけの仕事に『鯖』が必要な理由を教えて下さいよ。
0105nobodyさん2006/01/21(土) 23:09:45ID:???
>>102
お前は何を言っているんだ
0106nobodyさん2006/01/21(土) 23:13:32ID:???
定期的に電源いれてボタン押してくれる小人さんは鯖の中に住んでるから。
0107nobodyさん2006/01/21(土) 23:21:10ID:???
名前はcronタンとゆいます
0108nobodyさん2006/01/21(土) 23:25:38ID:???
実際携帯あれば事は足りる
0109nobodyさん2006/01/21(土) 23:26:11ID:???
> が、残念ながら今使ってる鯖ではcronは使用できませんでした。
0110nobodyさん2006/01/21(土) 23:35:50ID:???
>ゆいます
国語大丈夫か?
0111nobodyさん2006/01/21(土) 23:54:13ID:???
2chでいちいち言葉の間違いをしない方がイイアルネ。
わざとの人も多いから、なんか恥ずかしいアルネ。
0112nobodyさん2006/01/22(日) 00:08:00ID:???
ゆいますを指摘するならタンのとこも指摘して欲しかったな
0113nobodyさん2006/01/22(日) 00:36:47ID:???
>>106ー107
cronタン以外にもそういう仕事ができそうな小人さんは結構いるぞ。
0114nobodyさん2006/01/22(日) 00:57:39ID:???
ここは Perl スレなわけだが。
0115nobodyさん2006/01/22(日) 01:26:49ID:???
掲示板の記事の検索機能をつけたいのですが
検索のところは、plファイル内で

#$valueはフォームから受け取った文字列
if($data =~ /$value/m){
print "$data";
}

として、検索文字列にカタカナを指定した場合はエラーになってしまうのですが何ででしょうか?
0116nobodyさん2006/01/22(日) 01:37:04ID:???
2つ質問があります。分かる方、答えていただけたら幸いです。
これらのことはPERLで可能ですか?

PERLでプログラムを作って条件にあわせて、メールアドレス宛に
いってほしいURLを生成して送ります。
↓
そのメールが送ってきた人がそのURLをクリックして、リンク先にいくと
結果が載っていて、その結果は多数のHTMLのページをスタイルシートを利用して
1ページにまとめて組み合わせたものになっている。

というようなことは出来ますか?
簡単に言えば、

ページ1で山田さんがAとBとCの中からAを選び、DとEとFの中からEを選びます。
↓
すると、山田さん宛にAとEの内容が記述されたページのURLが届きます。
↓
そのURL先のページもcgiによって生成される(メールからAとEの変数を渡すことになるのかな?)
↓
その表示されたページは複数のHTMLページをあらかじめ作っておいて、それらを呼び出して、組み合わせで出来上がる。この場合AとEを呼び出す

01171162006/01/22(日) 01:38:53ID:???
もう1つの質問ですが、

あらかじめHTMLページを用意しておいて、変数にしたいところのタグだけ $HOGEHOGE のようにしておいて、
cgiのほうに読み込み、$HOGEHOGEの変数の値を適用させて表示することって可能ですか? 
0118nobodyさん2006/01/22(日) 01:42:24ID:???
>116
>そのメールが送ってきた人がそのURLをクリックして、
ちゃんとした日本語文で書いてくれ
01191162006/01/22(日) 01:42:52ID:???
>>116の そのURL先のページもcgiによって生成される(メールからAとEの変数を渡すことになるのかな?)
の部分ですが、URLから判定させること出来ないですか?

その行き先のURLは一律で http://www.hogehogehoge.com/hoge.cgi というように決まっていて
hoge.cgi以降にAとEが表示されるように

http://www.hogehogehoge.com/hoge.cgi?A&E

みたいなURLを先ほど記述したメールで送っていて、これをクリックすると
hoge.cgiがAのhtmlとEのhtmlを組み合わせればいいということを判定して
これらをスタイルシートを使って組み合わせて1ページで出力するということです。

説明が分かりづらくてごめんなさい。
0120nobodyさん2006/01/22(日) 01:43:23ID:???
>>118
説明力不足でごめんなさい _(。。)_
0121nobodyさん2006/01/22(日) 02:09:21ID:???
>>115
/\Q$value\E/
という話ではなくて?
0122nobodyさん2006/01/22(日) 02:12:52ID:???
質問させてください。

''(0バイト文字列)または'.'または'..'と言う文字列に「のみ」
合致する正規表現ってどう書けばいいですか?
「〜を含む文字列」なら自力でも書けそうな気がするんですが・・・orz
0123nobodyさん2006/01/22(日) 02:21:12ID:???
>>122
/^\.?\.?$/
0124nobodyさん2006/01/22(日) 02:28:23ID:???
>>116 両方とも余裕で可能。END
0125nobodyさん2006/01/22(日) 02:34:09ID:???
>>124
どういった仕組みを利用すれば可能ですか?
0126nobodyさん2006/01/22(日) 02:49:48ID:???
CGI の初歩を勉強する
Perl 以前の問題

逆に聞きたいが、「スタイルシートを使ってページを組み合わせる」と自分で
書いているが、これは XSLT か? 「スタイルシートを使って組み合わせる」
という方法はいったいどこで聞きかじったんだ?
0127nobodyさん2006/01/22(日) 03:35:43ID:???
>>114
何でこんな的外れなレスが返ってくんの?
0128nobodyさん2006/01/22(日) 03:59:08ID:???
スタイルシートで2ページを合体って出来るもの?
0129nobodyさん2006/01/22(日) 04:01:07ID:???
>>126,128
すいません、インラインフレームでした。。。
もしくはphp利用か
0130nobodyさん2006/01/22(日) 06:28:00ID:???
ページ1で山田さんがAとBとCの中からAを選び、DとEとFの中からEを選びます。
・htmlのselectでも使って選択させ、その内容をcgiに発射
↓
すると、山田さん宛にAとEの内容が記述されたページのURLが届きます。
・cgiで受け取った情報を元にURL作ってsendmailかなんかでメール発射
↓
そのURL先のページもcgiによって生成される(メールからAとEの変数を渡すことになるのかな?)
・受け取ったURLを押すとcgiが起動
↓
その表示されたページは複数のHTMLページをあらかじめ作っておいて、それ
AとEのhtmlを読み込み”s/$HOGEHOGE/なにか/g;”かなんかで変更して一緒に表示

単純すぎて説明しずらいorz
てか、ほんとにperlできるの?
0131nobodyさん2006/01/22(日) 07:42:23ID:???
>>130
ごく初歩。
0132nobodyさん2006/01/22(日) 07:45:24ID:???
こういうことかい?
1) 山田が hoge.cgi?select1=A&select2=E で発射
2) piyo.cgi?para=A、piyo.cgi?para=E というURL付メールが届く
3) piyo.cgi?para=A、piyo.cgi?para=E が加工したページを表示

簡単にPerlで実現できると思うのだが。
0133nobodyさん2006/01/22(日) 08:12:49ID:???
むしろどのあたりが解らないのか解らない…
どこが解らないか言ってもらえれば詳しく解説したり、
モジュールを薦めたりいろいろやりようもあるんだがねぇ
# >>130の最後の一文を「ほんとにperlでできるの?」と読んで
# 130にレスを返そうとしてしまった件...アブナカッタ
0134nobodyさん2006/01/22(日) 08:15:06ID:???
選択したページを一緒に表示させるみたいだから

1) 山田が hoge.cgi?select1=A&select2=E で発射
2) piyo.cgi?para=AE というURL付メールが届く
3) piyo.cgi?para=AE が加工したページを表示

だろ

piyo.cgi?para1=A¶2=E でもいいけど。
0135nobodyさん2006/01/22(日) 08:17:25ID:???
↑ここでも文字化けするんだね。
&amp;って書かないと駄目なのか
験し→&
0136nobodyさん2006/01/22(日) 09:22:10ID:???
>>135
&amp;って書きたいのなら&amp;amp;って書くといいよ。
0137nobodyさん2006/01/22(日) 09:23:50ID:???
>>138
&amp;amp;って書きたいのなら&amp;amp;amp;って書くといいよ。
0138nobodyさん2006/01/22(日) 09:43:12ID:???
カキたいなら家族に見つからないようにね♪
0139nobodyさん2006/01/22(日) 10:52:36ID:???
>>116
それぞれの処理を Perl のどの機能を利用して実現したらいいのか
具体的なイメージが湧いていないように見える。慌てずに一つずつ
自分で対処してくれ。他にもいろいろ書かれているが、個々の処理は
どれも難しくないが、>>117 を読む限り、目的の処理全体を実現
するには君の力はまだかなり足りない。
0140nobodyさん2006/01/22(日) 12:37:05ID:???
コマンドに対して入出力するにはどうすればいいでしょうか。
例えば、passwdコマンドにパスワードを渡してその結果を得るにはどうすればいいのでしょう。

渡すだけならばopen(PASS,"| /usr/bin/passwd")で出力用パイプでできるのですが、
これだと結果を変数へ受け取れません。

試しに入力と出力のパイプを二つつけてみましたが、
Can't open bidirectional pipe
と言われてしまいました…。
0141nobodyさん2006/01/22(日) 12:39:19ID:???
>>140
``
0142nobodyさん2006/01/22(日) 12:45:31ID:???
間違えた、passwdコマンドじゃ結果がこないからだめですね。
ここはpasswdが、受け取るべき値を返すものと仮定してください…。

実際にやろうとしているコマンドはCourier-IMAPのuserdbpwです。
0143nobodyさん2006/01/22(日) 12:47:03ID:???
>>140
は…速い。

それですと値を渡せないと思います。
こちらから値を渡して、なおかつその結果を受け取りたいと思っています。
0144nobodyさん2006/01/22(日) 12:53:47ID:???
>>140
PIPEを入力と出力両方開くだけならこれ
http://search.cpan.org/~abergman/ponie-2/perl/lib/IPC/Open2.pm
しかしpasswdのような特殊な入力方式を使っているものでできるかは知らない…
0145nobodyさん2006/01/22(日) 13:16:41ID:???
>>144
おお、これでできそうな気がしますが…、すごいサイズのモジュールですね。
configureだけしてみましたが、大量のファイルを呼んでいる上に
なぜだかすごいWARNINGができるのちょっと入れるをの躊躇してしまいます…。

もう少し他の方法を探ってみます。
どうもありがとうございました。
0146nobodyさん2006/01/22(日) 13:26:12ID:???
>>145
あ、貼ったリンクのURLが悪かった、スマソ
IPC::Open2とIPC::Open3は標準モジュールだよん
0147nobodyさん2006/01/22(日) 13:47:43ID:???
>>146
おかげさまで何とかできました。

ただWriter->autoflush(1)とするとなぜか
Can't locate object method "autoflush" via package "IO::Handle"
といわれることや、closeしなくていいのか、という疑問がありますが、
自分で使う用のスクリプトなので、とりあえず今は目をつむることにします。

とても助かりました。
どうもありがとうざいました。
0148nobodyさん2006/01/22(日) 14:09:27ID:???
>>121
ありがとうございます。
メタ文字をクォートするんですね
0149nobodyさん2006/01/22(日) 14:33:51ID:???
_, ,_
(゚Д゚)
01501162006/01/22(日) 15:08:15ID:???
さまざまなご返答をしてくださった方、ありがとうございました。
==========================================================================================================
HTMLページ(select使って変数発射)→hoge.cgiが条件などがURLを生成してメール送信→URLのpiyo.cgi?PARA=AEにAとEの
両方のページがインラインフレームを使って表示される。
==========================================================================================================

・htmlのselectでも使って選択させ、その内容をcgiに発射
↓
すると、山田さん宛にAとEの内容が記述されたページのURLが届きます。
・cgiで受け取った情報を元にURL作ってsendmailかなんかでメール発射
↓
そのURL先のページもcgiによって生成される(メールからAとEの変数を渡すことになるのかな?)
---------ここまでの過程はすべて自分でプログラムできます------------


分からないのは、ここからで、どのような処理を施せば、hoge.cgiが

・メール受け取ったURLをクリックするとpiyo.cgiが起動
↓
その表示されたページは複数のHTMLページをあらかじめ作っておいて、それ
AとEのhtmlを読み込む。

これですね。piyo.cgiが URLの piyo.cgi? 以降をどのような処理で読み込んで
AとEを合わせて表示しろ っていう処理の方法が分からなくて困っています。
01511502006/01/22(日) 15:13:29ID:???
==========================================================================================================
HTMLページ(select使って変数発射)→hoge.cgiが条件などからURLを生成してメール送信→URLのpiyo.cgi?PARA=AEにAとEの
両方のページがインラインフレームを使って表示される。 ^^^^
==========================================================================================================

訂正です。 条件など「から」  でした。すいません
0152nobodyさん2006/01/22(日) 15:46:09ID:???
>>150
そこがいちばん簡単だと思うんだがなぁ。
つーかなぜインラインフレームにこだわるのかも分からないけどね。
完成している HTML を2つくっつけたら明らかにおかしなことになるし。
なんか自分で変な条件をつけてはまってないか?

おれなら
1. パラメータを解釈して
2. 対応するファイルを開いて読み込み
3. <body></body> の間を抜き出して
4. これをファイル分くり返して
5. くっつけて print
して終わり。インラインフレームは使わない。
0153nobodyさん2006/01/22(日) 16:01:49ID:???
>>152

すいません、ここの箇所だけが分からなくて。。。

その方法でかまわないと思います。
パラメーターの解釈ってどうなるんですか?
そのcgiのURLを引っ張り出して、そこに PARA=Aが含まれるか?とかですか?

もし、よければどのような形になるか書いてもらえませんでしょうか?


例えば、呼び出すA.htmlの中身は
<HTML><HEAD></HAED><BODY> A </BODY><HTML>

呼び出すB.htmlの中身は
<HTML><HEAD></HAED><BODY> A </BODY><HTML>

としてですね。
0154nobodyさん2006/01/22(日) 16:15:37ID:???
もっと基礎を学んで来い
0155nobodyさん2006/01/22(日) 16:23:24ID:???
>>153
「ここの箇所だけ」が分からないんじゃない。
それが分からないのは CGI の基礎が全然分かってないってこと。
0156nobodyさん2006/01/22(日) 16:31:34ID:???
>153
ここは小学生の相手をする学童保育所じゃないんで、
CGIの仕組みを勉強してから来てね
0157nobodyさん2006/01/22(日) 16:42:49ID:???
おまえらの冷たさワロスw
0158nobodyさん2006/01/22(日) 17:20:29ID:???
検索CGIの改造やってます。

登録時にプルダウンメニューから入力させているのですが
登録内容の変更・削除時にあらかじめ登録していた内容が
プルダウンで表示されるようにすることはできるのでしょうか?
<OPTION>タグでselected指定をすれば実現すること自体は分かっているのですが。

どうしても難しそうだったら、変更の度に新たに入力し直してもらおうと思ってはいますが
登録側に不親切だと思うので、できれば実現したいです。
0159nobodyさん2006/01/22(日) 17:47:41ID:???
>>158
1. 「あらかじめ登録していた内容」を読む。
2. それに基いて適宜 selected な <option> を吐く。

必要なのはこれだけ。

どうしても難しそうなのは、回答の度に新たな質問が生成し直されそうな点ですが
回答側が不機嫌になりかねないので、できればもう少し基礎を学んで欲しいです。
01601582006/01/22(日) 17:52:20ID:???
>159
ごめんなさい、そしてありがとう。
0161nobodyさん2006/01/22(日) 18:08:15ID:???
こりゃあVIPのプログラムスレの影響かなぁ
0162nobodyさん2006/01/22(日) 18:34:46ID:???
あのさあのさ
メールにインラインフレームの記述した HTML を書き個数だけ用意して、
メールにその HTML のアドレスを書きゃぁいいのでぁ?
AD, AE, AF
BD, BE, BF
CD, CE, CF
0163nobodyさん2006/01/22(日) 18:55:56ID:???
>>162
それがハンパなく多くなってしまうんです。。。。
0164nobodyさん2006/01/22(日) 18:59:27ID:???
>>163
いちいちレスしている暇があるなら、CGIの基礎を学んでこい!
その方が早い。
マジ話、基礎中の基礎だからな。
ちょっと勉強すればわかるって程度の話なんだからな。
0165nobodyさん2006/01/22(日) 21:29:59ID:???
JavaScript の方がいいんでない?
とか思ったり
0166nobodyさん2006/01/24(火) 23:59:54ID:8wVWM4jM
変数q1が空でなければ、$message2に変数q1の文字列を追加する
ということをしたいのですが、エラーになってしまいます。
どこが間違えていますか?

がんばって考えてみたがエラーで鬱な部分_| ̄|○
↓
if($in{"q1"] ne ""){ $message2 .= $in{"q1"]; }
01671662006/01/25(水) 00:01:27ID:Ofc3DeTH
書き忘れました。
cgi-lib.plを使って、$in{"q1"}で変数の中身を取り込んでいます。
0168nobodyさん2006/01/25(水) 00:04:06ID:???
>>166
if($in{"q1"] ne ""){ $message2 .= $in{"q1"]; }
      〜                   〜
なんというか…フォント変えたほうが良いんじゃないか…
0169nobodyさん2006/01/25(水) 00:09:09ID:???
if($in{"q1"} ne ""){ $message2 .= $in{"q1"}; }
}と]の間違い
単純に
if($in{"q1"}){ $message2 .= $in{"q1"}; }
じゃまずいのか?
0170nobodyさん2006/01/25(水) 00:09:29ID:Ofc3DeTH
>>168
ぐはーーーー、これで3日間悩んでいますた。
ありがとうございます・・・うぅ。
まさかこんなオチとは_| ̄| . . . ○
0171nobodyさん2006/01/25(水) 00:10:36ID:Ofc3DeTH
>>170
ありがとうございます。
「空かどうかの判断」はそういう記述でもOKなんですね。
0172nobodyさん2006/01/25(水) 00:14:24ID:???
>>169
それだと"0"のときも空扱いなのに注意。
むしろ空なんだったら繋いでも結果変わらないんだから
$message2 .= $in{"q1"};
これだけで良くない?definedか調べるのなら解るけど
# 漏れの書き込みがずれてるし…フォント変えとこう:-p
0173nobodyさん2006/01/25(水) 01:45:33ID:???
if(defined($in{"q1"})){〜
でいいんじゃないかな・・・
0174nobodyさん2006/01/25(水) 02:07:16ID:???
>>170
俺も1回やったことあるw
どんなフォントだとわかりやすいんだろう。
0175nobodyさん2006/01/25(水) 02:10:15ID:???
いろいろな文字列調がある変数を全角36文字で改行したいです。
$text1, $text2, . . . $text50

改行処理をして、
$text1

$text2

$text3
.
.
.
$text50
としたいのですが、文字列に全角36文字文で「\n」を入れたいんです。
半角や数字・記号等が混じっているのですが、どのように挿入するのでしょうか?
0176nobodyさん2006/01/25(水) 02:13:47ID:???
まずは文字コードから勉強しようか
0177nobodyさん2006/01/25(水) 02:15:29ID:???
lengthで文字列のバイト数を調べればいけるかも。
0178nobodyさん2006/01/25(水) 02:16:22ID:???
Perlメモでも読んで来い
0179nobodyさん2006/01/25(水) 02:17:59ID:???
>>177
お前全角文字のど真ん中でぶった切りそうだな
0180nobodyさん2006/01/25(水) 02:18:32ID:???
>>179
そんな細かい事キニシナイ
01811752006/01/25(水) 02:18:48ID:???
>>176-178
perlメモという親切なサイトに逝ってきまつ
0182nobodyさん2006/01/25(水) 02:21:15ID:???
>>180
お前、すがすがしいぐらいにハッキリ言うなw
01831812006/01/25(水) 02:46:39ID:???
うーん、考えてみますたがダメぽ。

require "jcode.pl";
require "fold.pl";
require "cgi-lib.pl";

$bytes = '72';

$text=$in{"text"};

jcode::convert(\$text, "euc");

while (length($text)) {
(my $text_mod, $text) = fold($text, $bytes);
$text_mod .= $folded, "\n";
}

print "$text_mod";


最終的には改行された(\nの入った) $text_modができたらいいのに難しいです・・・。
0184nobodyさん2006/01/25(水) 02:54:23ID:???
>>175はなぜ配列をつかわんのだ?
0185nobodyさん2006/01/25(水) 02:55:57ID:???
自力でなんとか改行できましたー、ありがとうございます。

>>184
配列を使おうと勉強しているのですが、
@が出ると眠くなってしまうので、できたためしがありません。
@_ とかの独特の表記がまだ飲み込めません。
0186nobodyさん2006/01/25(水) 03:25:05ID:???
>>185
> @が出ると眠くなってしまうので
おまえはトンボか? グルグルグル。
0187nobodyさん2006/01/25(水) 03:49:07ID:???
眠くなるのが普通だな。
0188nobodyさん2006/01/25(水) 04:10:50ID:???
だから、配列を使ったプログラムは納期が遅れることがよくあるんだな、納得。
0189nobodyさん2006/01/25(水) 10:15:17ID:???
>>186
> > @が出ると眠くなってしまうので
> おまえはトンボか? グルグルグル。

ウケタ...今度使わせて貰うw
0190nobodyさん2006/01/25(水) 10:55:53ID:???
@ @
 △
0191nobodyさん2006/01/25(水) 22:22:06ID:???
  $RR = int(rand(2));
  $AAA[0]=$AAA[0]+1+$RR;
  $AAA[1]=$AAA[1]+1+$RR;
と
  $AAA[1]=sprintf("%03d",$AA[1]);
  $AAA[2]=sprintf("%03d",$AA[2]);
って、もっと効率よく記述できませんでしょうか  
0192nobodyさん2006/01/25(水) 22:29:35ID:???
???
0193nobodyさん2006/01/25(水) 22:38:09ID:???
>>191
map とか foreach とか。

@AAA = map { $_ + 1 + $RR } @AAA;

$_ = $_ + 1 + $RR foreach @AAA;

@AAA = map { sprintf('%03d', $_) } @AA;
0194nobodyさん2006/01/25(水) 22:38:35ID:???
>>191
効率よくするのはその部分だけ見せられてもほとんど無理だが、
見やすくするならforeachやmapが有効。

その操作は配列全体に行うの?配列全体になら
$RR = int(rand(2)) + 1;
$_ += $RR foreach @AAA;
及び
@AAA = map { sprintf("%03d",$_) } @AA;

配列の一部だけなら@AAA[0,1]のように配列の一部を指定すればOK。
その場合それが見やすくなるかは微妙だけど
01951942006/01/25(水) 22:39:51ID:???
>>193
ケコーン
遅かったorz
01961912006/01/25(水) 22:46:15ID:???
>>193-195
ためになりました!
配列操作おざなりにしてたので……
もっと勉強してみます
0197nobodyさん2006/01/25(水) 23:46:22ID:???
#!/usr/bin/perl
$hoge = '10';
&fuga($hoge);
print $hoge;

sub fuga(){
$aaa = @_ + 50;
return $aaa;
}

結果は「60」になると思ったのですが「10」でした。どこかが間違えているのでしょうか?
$hoge に fugaサブルーチン を通した結果を表示させたいです。
0198nobodyさん2006/01/25(水) 23:50:34ID:???
結果受け取ってないじゃん
01991972006/01/26(木) 00:03:19ID:???
#!/usr/bin/perl
$hoge = '10';
&fuga($hoge);
print $hoge;

sub fuga(){
$aaa = @_ + 50;
return;
}

returnだけで値を返したつもりですがこれでも「10」です・・・。
0200nobodyさん2006/01/26(木) 00:11:19ID:???
#!/usr/bin/perl

@hoge = (10, 20, 30);

print &fuga(@hoge);

sub fuga(){
  my($total);
  foreach (@_){
    $total += $_;
  }
  return $total;
}
0201nobodyさん2006/01/26(木) 00:37:33ID:???
$hoge = 10;
$moge = fuga($hoge);
print $moge;

sub fuga(){
$aaa = $_+50;
return $aaa;
}
0202nobodyさん2006/01/26(木) 00:46:45ID:???
すまん間違った
$hoge = 10;
$moge = fuga($hoge);
print $moge;

sub fuga(){
$aaa = $_[0]+50;
return $aaa;
}
0203nobodyさん2006/01/26(木) 02:00:59ID:???
サブルーチンの呼び出し時は関数名の前に&を付けるべきなのか付けないべきなのか
ちょっと↑見たら早速両方のパターン

&あるとわかりやすいとかくらいしかメリットないのかな
0204nobodyさん2006/01/26(木) 02:25:15ID:???
>>203
この質問結構出るな…
この話題から論争になったことがあるのでFAQを挙げるだけに留めて置く事にする。
ttp://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq7.html#What_s_the_difference_between_ca
漏れの好みとしては必要ないなら&つけない
0205nobodyさん2006/01/26(木) 03:21:18ID:???
俺は
&foo();
のようにしてる。
渡す値が無くても括弧はつけてるかな。
ちゃんと関数が呼ばれて意図した動作なら「お好きなように」って感じかな
0206nobodyさん2006/01/26(木) 06:40:19ID:???
use Time::HiRes qw(time);

time 関数を HiRes モジュールからインポートして使おうと思っているのですが、
インポートする際に関数を別名でインポートすることはできますか?

HiRes の time() は mtime() とかっていう名前で扱いたいので・・・
0207nobodyさん2006/01/26(木) 06:51:16ID:???
リファンレス
0208nobodyさん2006/01/26(木) 06:56:34ID:???
>>206
use Time::HiRes;
BEGIN { $::{mtime} = *Time::HiRes::time }
0209nobodyさん2006/01/26(木) 06:58:32ID:???
&{$mtime} みたくなるってことですよね?
なんか気持ち悪いw

&mtime();
のようにして呼び出すことはモジュールを書き換えない限り無理ってことなのかな?
0210nobodyさん2006/01/26(木) 06:59:05ID:???
& は余計だった
02112082006/01/26(木) 07:03:01ID:???
ごめん解説付け忘れた
>>206
Time::HiResはExporterを使ってExportしているだけなので、
Exporterがやる仕事を自前で書いてやれば良い。
で、それは何かというと使用する側のパッケージのシンボルテーブルに
指定されたシンボルをエクスポートするということなので
BEGINブロックの中でその操作を行うと>>208のようになる
0212nobodyさん2006/01/26(木) 07:10:34ID:???
おぉ〜出来た♪
Exporter とか BEGIN とかそこらへんを勉強してきます。
ありがとうございました。
0213nobodyさん2006/01/26(木) 09:55:58ID:o/1/VUZ9
@number = (123,1234,124,1245);
sub bynumber{ $a <=> $b}; }
@number = sort bynumber @number;

配列の値を数値で並べる方法なんだそうだが、
サブルーチンがどういう働きしてるかさっぱりわからん。
誰か解説お願いします。
0214nobodyさん2006/01/26(木) 10:27:31ID:???
>208
些細なことなんですが・・・
*Time::HiRes::time
の time のケツにセミコロンがありませんが (strict で書いてるけどエラー無し)、付けたほうがいいです・・・よね?
0215nobodyさん2006/01/26(木) 10:29:21ID:???
>213
昇順でソート
配列に入れる値が既に並んでしまってるのでもっとばらけて入れてみるとわかるかと
ちなみに
$b <=> $a
ってすると降順になります
0216nobodyさん2006/01/26(木) 10:33:59ID:???
>>213
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_sort_LIST と
http://perldoc.jp/docs/perl/5.6.1/perlop.pod の「Equality Operators」参照。

>>214
つか

use Time::HiRes (); # どのシンボルも輸入しない
# サブルーチンだけを現在の名前空間に選択的に輸入
BEGIN { *mtime = \&Time::HiRes::time }

の方が良い。
02172132006/01/26(木) 11:11:15ID:???
>>215
それは知ってるんですが原理がわからない・・・
>>216
そこに書いてあること読んだらなんとなくわかったような・・・
サンクスです。もうこれはこういうものとして覚えておきます。
0218nobodyさん2006/01/26(木) 11:25:41ID:???
>>217
・$aと$bというグローバル変数に比較用の2つの値が入れられる
・<=>やcmp演算子は比較して-1か0か1を返す
・sortに与えられたサブルーチンの戻り値が-1か0か1かでどう入れ替えるか決定する

例えば @new = sort { 1 } @old; とすればsort演算子は全ての比較結果が1となったものと認識する。ソートにならないが。
0219nobodyさん2006/01/26(木) 11:25:49ID:???
>>217
覚えておくので正解
0220nobodyさん2006/01/26(木) 14:24:27ID:ltI+aLo5
$data =~ /(\d) (\d)/g;なんてことをしたときに、
$1と$2のリストをそれぞれ違う配列に入れたいのですがどのようにしたら良いでしょうか?
どなたか教えて頂けると嬉しいです。。
0221nobodyさん2006/01/26(木) 14:27:08ID:???
push(@list1, $1);
push(@list2, $2);
02222202006/01/26(木) 14:33:36ID:???
分かりにくくて済みません_ _
###$data###
3 6
2 8
9 2
となっていたとき、
@test == qw(3 2 9);@test2 == qw(6 8 2);
となる様に/(\d) (\d)/の正規表現を利用して処理をしたいです。
二回正規表現を通して処理をすることも出来るのですが、単純に二倍の処理量になってしまうので。。
0223nobodyさん2006/01/26(木) 14:48:40ID:???
>222
>>221
終了
次
0224nobodyさん2006/01/26(木) 14:52:35ID:???
>>222
my $data = <<'EOD';
3 6
2 8
9 2
EOD
my(@test, @test2);
push(@test, $1), push(@test2, $2) while $data =~ /(\d) (\d)/g;
print join ' / ', 'test', @test, "\n";
print join ' / ', 'test2', @test2, "\n";
02252202006/01/26(木) 14:59:11ID:???
>>224
ありがとうございます。出来ました!
0226nobodyさん2006/01/26(木) 15:08:19ID:pZnDhk3y
コーディングに関する質問じゃないんだけど
なゆ板 を探してます。
なゆ板本体一式、提供よろしく。
0227nobodyさん2006/01/26(木) 15:23:23ID:???
>>226
スレ違い。
0228nobodyさん2006/01/26(木) 15:49:07ID:???
>>226
【CGI】こんなCGI探してますver.19
http://pc8.2ch.net/test/read.cgi/hp/1134255607/
0229nobodyさん2006/01/26(木) 15:57:50ID:pZnDhk3y
>>228
ありがとん
0230nobodyさん2006/01/27(金) 02:13:52ID:fitN0QJi
おそらくリファレンスの解釈がどこか間違っているのだと思いますが、
どうしても分かりません。
どうして下記スクリプトのパターンA/Bは違う結果が出るのでしょうか?

---

#!/usr/bin/perl
use strict; use Jcode;
my $henka= "%CA%D1%B2%BD"; #EUC / URIエスケープ / 変化
my $encoding = 'utf8';
my $j = new Jcode;
# パターンA
my $a1 = uri_decode( $henka ); my $a2 = encode( $a1, 'utf8' );
# パターンB
my $b = encode( uri_decode( $henka ), 'utf8' );
# 書き出し
print "Content-type: text/html\n\n";
print "パターンA:" . $a1 . " / " . "<br />パターンB:" . $b;
exit;
# サブルーチン
sub encode {
my( $str, $enc ) = @_;
$enc = $encoding unless( $enc );
return( $j->set(\$str)->$enc );
}
sub uri_decode {
my $str = shift;
$str =~ tr/+/ /;
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
return( $str );
}
02312302006/01/27(金) 02:15:51ID:???
>>230は出来る限り省略していますので
見づらいかも知れません。

なお、Perl 5.8.3
スクリプトの文字コードはUTF-8です。
02322302006/01/27(金) 02:23:01ID:???
連投すいません。
書き出すスクリプトを間違えてしまいました。
>>230は無しで改めて質問します。
02332302006/01/27(金) 02:52:17ID:fitN0QJi
度重なる連投申し訳ありません。

EUC-JPでURIエスケープされた「変化」である
「%CA%D1%B2%BD」を取得したいのですが、
どうしても出来ません。

どなたかご指摘いただけないでしょうか?

Perl 5.8.3 / UTF-8
---
#!/usr/bin/perl

use strict;
use warnings;
use Jcode;

my $word = "変化";
my $j = new Jcode;

# EUCに変換
my $word = $j->set(\$word)->euc;
# URIエスケープ
$word =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
$word =~ tr/ /+/;
# 書き出し
print "Content-type: text/html\n\n";
print $word;
exit;
0234nobodyさん2006/01/27(金) 03:01:30ID:???
packじゃね?もう忘れたけど。
02352332006/01/27(金) 03:07:08ID:???
>>234
いや、他の単語だと問題なく取得できるんですよ。
ちなみにURIエスケープは、Perlメモさんのコードを流用しています。

昔よく見たsjis系の文字化けのEUC版かな?と思いきや、
ネットにそういう情報転がってないですし…

正直、お手上げ状態になってます。
0236nobodyさん2006/01/27(金) 03:16:24ID:???
じゃあ"変化"を'へんか'にするとか。当てずっぽうだけど。
0237nobodyさん2006/01/27(金) 03:16:57ID:???
'へんか'じゃなくて'変化'ね。変換忘れた。
02382332006/01/27(金) 03:18:59ID:???
>>237
いや、失礼ながら明らかに意味ないと思うんですけど
0239nobodyさん2006/01/27(金) 03:26:57ID:???
my $word = "変化";

my $word = $j->

2回myしてるのは何か意味ある?失礼ながらだけど。
0240nobodyさん2006/01/27(金) 03:27:15ID:???
>235=233
ネットに情報、転がってますよ。
ttp://naoya.dyndns.org/~naoya/mt/archives/000611.html
ttp://www.hikoboshi.org/perl/doc/encode.html
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
0241nobodyさん2006/01/27(金) 03:31:49ID:???
>233
「できません」じゃなくて
「これこれの結果を期待したが結果はこれこれでした」でしょ。
あと他の例だとどうなったとか。

まぁぶっちゃけそんなこと書かなくても解るがな。
0242nobodyさん2006/01/27(金) 03:36:30ID:???
>>233
単にJcodeが渡された文字のエンコード判定できなかっただけだと思う。

my $word = $j->set(\$word,'utf8')->euc;

ってやってみ。
02432332006/01/27(金) 03:43:34ID:???
>>239
よれよれ具合を如実に表してます。typoですorz

>>240
UTF8フラグに関わることしてないと思うんですが
いかがでしょう?

>>241
ごくシンプルな例なので必要ないかと判断しました。
でも言葉足らずだったとは思います。
ご指摘ありがとうございました。

>>242
ビンゴでした!

入力コードの自動判定失敗の理由は不明ですが、
常に明示しておいた方がよさそうですね。

ありがとうございます。
0244nobodyさん2006/01/27(金) 09:39:12ID:???
Perlで処理を行った後、30秒後にある処理をキックしたいんですが、

処理A
処理A終了・・・
system("hoge.pl 43232");  ←これの中でsleep 30;をやっている

みたいな書き方だと、一部のブラウザでは30秒ウェイトが発生してしまいます。
普通に、コマンドみたいな形でキックしたいだけなんですが、system以外に何か良いコマンドはないでしょうか?
0245nobodyさん2006/01/27(金) 12:13:09ID:???
>>244
なぜその場でなく30秒後にしたいのかにもよるけど、
そういう場合はforkを使ってプロセスを分ける。
0246ヽ(´ー`)ノ ◆.ogCuANUcE 2006/01/27(金) 12:17:01ID:???
atd が動いてるなら at でジョブを投げるのも手だな。
待ち状態なら後からキャンセルもできるし。
0247nobodyさん2006/01/27(金) 12:55:57ID:???
atは許可されてるかどうかが問題。
使えれば便利だろうけど。
0248nobodyさん2006/01/27(金) 13:46:48ID:???
  unless (A == B) { }
  else {}
と
  if (A != B) {}
  else { }
とでは、どちらが速いでしょうか
0249nobodyさん2006/01/27(金) 14:04:36ID:???
同じじゃない?
0250nobodyさん2006/01/27(金) 15:34:07ID:???
そんな差を気にするくらいならPerlを使うべきではない
0251nobodyさん2006/01/27(金) 15:41:22ID:???
ベンチも取れんのかお前はー!
0252nobodyさん2006/01/27(金) 15:44:22ID:???
公園にいけばたいていあるのにな。
0253nobodyさん2006/01/27(金) 15:48:33ID:???
>>248
気になるなら自分で調べるなりさー…
100万回くらい繰り返さないと差なんて出ねーよ。

Benchmark: timing 1000000 iterations of not_equal, unless...
 not_equal: 0 wallclock secs ( 0.20 usr + 0.00 sys = 0.20 CPU) @ 4950495.05/s (n=1000000)
 (warning: too few iterations for a reliable count)
 unless: 2 wallclock secs ( 0.27 usr + 0.00 sys = 0.27 CPU) @ 3759398.50/s (n=1000000)
 (warning: too few iterations for a reliable count)
0254nobodyさん2006/01/28(土) 00:39:19ID:???
>>253
お前いいヤツだな
0255nobodyさん2006/01/28(土) 05:56:33ID:ZADCbzDw
$aに文字[abc]が入っていた場合、 $a1 = hoge;
$bに文字[def]が入っていた場合、 $a1 = hogehoge;
みたいにすることはできますでしょうか?
0256nobodyさん2006/01/28(土) 06:54:55ID:???
if($a eq 'abc'){
  $a1 = ''hoge;
}
if($b eq 'def'){
  $a1 = ''hogehoge;
}
もし $b の 処理のとき $a1 に何かが入っていない場合であるなら
if(!$a1 && ($b eq 'def')){
で
0257nobodyさん2006/01/28(土) 06:55:30ID:???
ごめ
$a1 に代入する文字列が '' の外に出ちゃってるw
02582562006/01/28(土) 07:08:29ID:ZADCbzDw
>>257さん
ありがとうございます
でもこれとはちょっと違うんです
説明下手ですみません

$a = [email protected]だとして
[@xx.xx]の場合、$a1 = @hoge.ne.jp;を代入
$a = [email protected]だとして
[@yy.yy]の場合、$a1 = @hogehoge.ne.jp;を代入

みたいな感じで代入したいんです。
これは可能でしょうか?
何どもすみません
0259nobodyさん2006/01/28(土) 07:15:16ID:???
my($user, $host) = split(/\@/, $mailaddress);
my($newhost);

if($host eq 'abcdefg.ne.jp'){
  $newhost = 'hoge.ne.jp';
}elsif($host eq 'vwxyz.co.jp'){
  $newhost = 'hogehoge.ne.jp';
}else{
  $newhost = 'heogehogehoge.or.jp';
}
02602562006/01/28(土) 07:18:06ID:ZADCbzDw
分かりやすく書きますmm
もし$aが文字列[abc]を含んでいたら
$a1 = hoge;
# $a = "abc123"; だとしてもこの処理を行う
もし$aが文字列[def]を含んでいたら
$a1 = hogehoge;
# $a = "def123"; だとしてもこの処理を行う
0261nobodyさん2006/01/28(土) 07:23:22ID:???
ほんとそれが「判別したいこと」のすべて?
そうと信じて最後に・・・

my($mailaddress, $newhost);

if($mailaddress =~ /abc/i){
  $newhost = 'hoge.ne.jp';
}elsif($mailaddress =~ /def/i){
  $newhost = 'hogehoge.ne.jp';
}else{
  $newhost = 'heogehogehoge.or.jp';
}
0262nobodyさん2006/01/28(土) 07:27:19ID:???
>>260
index("abc", $a);
で次の条件はなんだ
"Abc"の場合も含むとかか
0263nobodyさん2006/01/28(土) 07:35:30ID:???
いくら例だとしても $1 とか $b は使うべきではないと思うんだけど・・・
これが sort に関してだったら返事してないw


>262
面倒だから正規表現でやったお
0264nobodyさん2006/01/28(土) 07:37:21ID:???
$1 じゃねぇや $a ね
0265nobodyさん2006/01/28(土) 07:38:02ID:???
今気が付いたんだけど、名前欄の数字違いますからw
02662552006/01/28(土) 07:45:20ID:ZADCbzDw
皆さん朝っぱらからご迷惑おかけしますmm
どれもできませんでした(^^;
>>261さん、わかりにくいくてすみません

アドレスをフォームで送ってもらい、そのアドレス欄
$mailに docomoの文字が入っていた場合、
$mailto = [email protected]
$mailに ezの文字が入っていた場合、
$mailto = [email protected]
みたいな文字列を返したいんです
わかりにくいですかね(^^;
0267nobodyさん2006/01/28(土) 07:59:12ID:???
暇なので反応w

my($user, $host) = split(/\@/, $mail);

if($host =~ /docomo\.ne\.jp$/i){
  # DoCoMo の場合の処理

}elsif{$host =~ /ezweb\.ne\.jp$/){
  # au の場合の処理

}elsif{$host =~ /[dhtcrknsq]\.vodafone\.ne\.jp$/i){
  # vodafone の場合の処理

}else{
  # どれにも一致しない場合
}
0268nobodyさん2006/01/28(土) 08:00:51ID:???
訂正


my($user, $host) = split(/\@/, $mail);

if($host =~ /^docomo\.ne\.jp$/i){
  # DoCoMo の場合の処理

}elsif{$host =~ /^ezweb\.ne\.jp$/){
  # au の場合の処理

}elsif{$host =~ /^[dhtcrknsq]\.vodafone\.ne\.jp$/i){
  # vodafone の場合の処理

}else{
  # どれにも一致しない場合
}
0269nobodyさん2006/01/28(土) 08:09:12ID:???
冗長
0270nobodyさん2006/01/28(土) 08:21:36ID:Tyr9AIOh
>>268間違ってるよ
知ったかすんな(^ω^)
0271nobodyさん2006/01/28(土) 08:25:12ID:???
例も示せない奴m9(^Д^)
0272nobodyさん2006/01/28(土) 08:26:52ID:???
間違い指摘じゃなくてお手本プリーズ
0273nobodyさん2006/01/28(土) 08:28:37ID:???
>269-270
>272
02742552006/01/28(土) 08:29:15ID:ZADCbzDw
>>270さん
もし分かるようでしたら教えてください
お願いします
0275nobodyさん2006/01/28(土) 08:35:41ID:???
>255=274
>270は突付いてみただけで何も書けない人なので待つだけ無駄だよん(^ω^)
02762552006/01/28(土) 08:43:35ID:ZADCbzDw
>>275さん
そうでしたか
皆様ありがとうございました
できなかったんですが
これを参考にsplit(よくわかんない)から勉強しなおしてきます
どうもありがとう
0277nobodyさん2006/01/28(土) 08:46:09ID:???
splitしなくても
/\@docomo\.ne\.jp$/i
とかでもOKです。
0278nobodyさん2006/01/28(土) 08:53:28ID:ZADCbzDw
require 'cgi-lib.pl';
&ReadParse(*in);
って数字以外扱えないとかありますか?
0279nobodyさん2006/01/28(土) 08:54:03ID:???
主語述語をハッキリと
0280nobodyさん2006/01/28(土) 09:14:12ID:ZADCbzDw
#こんな感じで書いてます

#!/usr/bin/perl
require 'cgi-lib.pl';

&ReadParse(*in);
my $acc = $in{'a'};
my $url = $in{'u'};

if($url = ~/ne\.jp$/i){
$st = "31";
}else{
$st = "23";
}
$ge = $st*$acc;
print <<"EOM";
content-type:text/html\n
<html><head><title>hoger</title></head><body>\n
<a href="$url">$url</a><br>
答えは$geです。<br>
</body></html>
EOM
exit;
0281nobodyさん2006/01/28(土) 09:16:38ID:???
おまえ日本語読めてますか〜?
主語述語どころかさっきよりも日本語変になってんじゃんけ
0282nobodyさん2006/01/28(土) 09:23:48ID:ZADCbzDw
>>281さん
すいません
言葉ではうまくいえないので
スクリプトさらしたほうがいいかと思って…
0283nobodyさん2006/01/28(土) 09:25:17ID:???
こんな風に書いててこんなエラーが出てます
どこか間違えてますでしょうか?

ソース開始



エラー内容開始



って書くのが普通じゃないかなと
0284nobodyさん2006/01/28(土) 09:29:23ID:ZADCbzDw
>>283さん
フォローありがとうございます
エラーは
<a href="$url">$url</a>が正しく表示されない(31となる)
どんなURLでもすべて["31"]が返ってくる
です
一応動作はします
0285nobodyさん2006/01/28(土) 09:31:49ID:???
そりゃそうだ
=~ ne\.jp$/i は「文字列の最後が ne.jp で終わっていれば」って意味だから
日本の大概のプロバイダのメールアドレスは一致するだろう
0286nobodyさん2006/01/28(土) 13:28:07ID:Tyr9AIOh
でも
0287nobodyさん2006/01/28(土) 13:40:33ID:???
>>280
前も見たな、こんなの
> if($url = ~/ne\.jp$/i){
正規表現マッチは =~ であって = ~ は意味が違う
0288nobodyさん2006/01/28(土) 13:59:03ID:ZADCbzDw
>>287さん
ありがとうございます!
それが原因でしたm(_ _)m
でもこれって最後の文字が[ne.jp]だったらってことですよね?
文の途中に入ってても処理してくれるようにはできないんですか?
しつこいようですがお願いいたします
0289nobodyさん2006/01/28(土) 14:05:22ID:???
正規表現でググればわかるんじゃないかなー
0290nobodyさん2006/01/28(土) 17:23:41ID:ZADCbzDw
>>289さん
正規表現マッチかなり便利そうですね
まだPerlかじりかけでして、
初歩的な質問ばかりしてご迷惑かけたことお詫びします><
これ見てやってみようと思います
0291nobodyさん2006/01/28(土) 17:52:35ID:???
他サーバーにあるHTMLファイルを読み込みたいと思っています。
LWPやHTTP:Liteというモジュールを使う方法をがあるようですが
これらが一般的でしょうか?
プロバイダのサーバにはインストールされていないようなので
他にも方法があれば教えてください。
0292nobodyさん2006/01/28(土) 18:32:38ID:???
>>291
だうそして、例えば Lib というディレクトリにおいて、
use lib "./Lib";
とやれば普通に require したり use したりできるようになるはずだべ。
0293nobodyさん2006/01/28(土) 18:34:53ID:kB13KdYy
すいません。教えて下さい。
クッキーをセットするサブルーチンで、
print "Content-type: text/html; charset=Shift_JIS\n";
print "set-Cookie: $COOKIE_NAME=$value; expires=$date\n\n";
と出力していて、うまくセットされていたのですが、このサブルーチン
より先に別のサブルーチンを呼び出すよう変更した途端、クッキーがセ
ットされなくなりました。その先に呼び出すサブルーチンその中に
print "Content-type: text/html; charset=Shift_JIS\n";
があるためと思われますが、クッキーセットのサブルーチンの
print "Content-type: text/html; charset=Shift_JIS\n";
を削ってもうまくセットされません。どうしてでしょうか?
0294nobodyさん2006/01/28(土) 18:43:16ID:???
予想:ブラウザに set-Cookie: $COOKIE_NAME=$value; expires=$date が表示されてる
02952932006/01/28(土) 18:54:28ID:HCtuTUwq
>>294
はい。その通りです。どうしたら良いでしょうか?
0296nobodyさん2006/01/28(土) 19:01:01ID:???
>>292
できました!
てっきりインストールしないと使えないものかと思ってました。
レスありがとうございました。
0297nobodyさん2006/01/28(土) 19:08:44ID:???
>>295
>print "Content-type: text/html; charset=Shift_JIS\n";
お前、この文の意味わかってるか?
02982932006/01/28(土) 19:43:54ID:3C15B2MW
>>297
すいません。分かりません。教えて下さい。
0299nobodyさん2006/01/28(土) 19:46:18ID:???
>>293のIDが全て違うから、もうこの話は終わりにしよう
03002932006/01/28(土) 21:21:54ID:wIuX5Wpl
すいません。そういう体質なもので仕方がないのです。
どなたか引き続き教えて下さい。
0301nobodyさん2006/01/28(土) 21:24:40ID:???
ここはPerlのコーディングスレでCGIスレではないんだが。
0302nobodyさん2006/01/28(土) 21:25:11ID:???
>>300
オライリーの「CGIプログラミング」15分でいいから立ち読みしてこい。
0303nobodyさん2006/01/28(土) 22:56:49ID:???
perl で例えばファイルをコピーする場合に、
何%終了のようなメッセージをどうしたら出力できますか?
0304nobodyさん2006/01/28(土) 23:19:15ID:???
ActiveXとかFlashとか使わないと無理
0305nobodyさん2006/01/28(土) 23:23:24ID:???
いや、ファイルをコピーの状況にもよるだろ。
CGIスレじゃないし、ローカル上のやりとりだと仮定すればできる。
具体性に欠ける質問には答える気0だけどな。
0306nobodyさん2006/01/28(土) 23:25:39ID:???
>>303
stat関数でファイルサイズを求めておき、read,writeのループをしながら読んだ・書いたバイト
数を累積していき、時々%を計算してprintすれば良いんじゃない?
0307nobodyさん2006/01/29(日) 02:18:43ID:???
1レスポンスしか投げれないからなぁ。
Ajaxからめたら強引にできそうだけど。
0308nobodyさん2006/01/29(日) 02:24:18ID:???
俺だったら FTP 開けるなw
0309nobodyさん2006/01/29(日) 09:20:15ID:???
ネットワーク越しにコピーするとは誰も言ってないのに...
Ajaxとか... FTPとか...
キミ達の妄想力には呆れるばかりだよ。
0310nobodyさん2006/01/29(日) 10:29:17ID:???
友達がいないんだからしかたねーじゃん。
0311nobodyさん2006/01/29(日) 11:05:56ID:???
>>303がどちらとも取れる質問なんだから、
どう答えても問題なし。

明確な回答が欲しければ、明確な質問をすること。
03123092006/01/29(日) 11:15:29ID:???
俺が質問者だと思い込むキミの妄想力には呆れるばかりだよ。
0313nobodyさん2006/01/29(日) 11:18:07ID:???
>>312
あんた誰?
03143092006/01/29(日) 11:58:10ID:???
俺は309だよ。
0315nobodyさん2006/01/29(日) 12:05:03ID:???
じゃあどうでも良いな。
03163092006/01/29(日) 12:48:06ID:???
騙り本気でウザいんだけど
03173092006/01/29(日) 13:08:17ID:???
>>316
そうか? 俺はお前に騙られても別にウザくないぞ。
0318nobodyさん2006/01/29(日) 13:09:37ID:???
最初にあおったのは309だと思う
(゚∀゚)ノ
03193092006/01/29(日) 13:14:28ID:???
>>312
>>314
>>316
>>317
はいはいわろすわろす
03203092006/01/29(日) 13:18:43ID:???
>>318
煽ったのは俺だが、騙ったのは別の誰かだ。
煽ってないとは一回も発言してない。

まさかとは思うが「騙る」を「あおる」と読んでる?
0321nobodyさん2006/01/29(日) 13:20:01ID:???
ここはPerlという言語だけではなく日本語という言語の勉強も行うスレですね
0322nobodyさん2006/01/29(日) 13:42:07ID:???
煽るから騙られることにさえ気づけない>>309が居るスレはここですか?
0323nobodyさん2006/01/29(日) 14:40:08ID:???
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
0324nobodyさん2006/01/29(日) 16:53:38ID:???
while (<STDIN>) {
chomp;
last if $_;
}
で入力待ちしているときに、
カウンタダウンを表示させたいとすれば、どういった方法を取ればいいのでしょうか?
0325nobodyさん2006/01/29(日) 16:59:54ID:???
そもそも last if $_; なんかやると、何か受け取るだけでループを抜けるのでは?
0326nobodyさん2006/01/29(日) 17:00:47ID:???
仮に last if $_; が last if !$_; であったとして、
0 とだけ書いた行が出て来るとループ抜けるですね。
0327nobodyさんNGNG
カウントダウンて何
0328nobodyさん2006/01/29(日) 18:21:45ID:???
sleepで1秒ごとに文字を表示しながら、
キー入力を受け付けたいのです。
0329nobodyさん2006/01/29(日) 18:27:58ID:???
意味不明です。
具体的に描写してください
0330nobodyさん2006/01/29(日) 18:43:57ID:???
あ・・・ここWebProgだった。ム板じゃない。吊ってきますorz
0331nobodyさん2006/01/29(日) 19:00:16ID:???
>>293

どうみても、print "set-Cookie: $COOKIE_NAME=$value; expires=$date\n";
print "Content-type: text/html; charset=Shift_JIS\n\n"; です。
本当にありがとうございました;
03323092006/01/29(日) 20:25:54ID:rcECZvhl
ここは騙ることで報復したと思えるお子様が住み着いているスレでしたか。
ム板でバカにされてるのもうなずける。
0333nobodyさん2006/01/29(日) 20:30:23ID:???
332 309 New! 2006/01/29(日) 20:25:54 ID:rcECZvhl
ここは騙ることで報復したと思えるお子様が住み着いているスレでしたか。
ム板でバカにされてるのもうなずける。
0334ム板 Perl スレ住人2006/01/29(日) 21:02:27ID:???
>>309
お前もこっちくんな
0335nobodyさん2006/01/29(日) 21:24:18ID:???
>>328
ああそういう意味ね
適当にforkなりthreadなり使え
03363092006/01/29(日) 21:25:22ID:???
> ム板 Perl スレ住人
最底辺を自慢してどうしたいんだよ。
0337nobodyさん2006/01/29(日) 23:13:56ID:???
粘着うざいな
0338nobodyさん2006/01/29(日) 23:31:23ID:???
顔が真っ赤なお子様がいると聞いて飛んできました
0339nobodyさん2006/01/30(月) 01:58:26ID:???
>>335
ありがとうございます。一つ挑戦してみます。
0340nobodyさん2006/01/30(月) 02:45:37ID:???
>>338
底辺PGは見栄張るなよ。
0341nobodyさん2006/01/30(月) 13:40:11ID:???
質問カモン
0342nobodyさん2006/01/30(月) 14:41:41ID:???
いくら待っても質問してこないから逝く
0343nobodyさん2006/01/30(月) 22:51:00ID:???
>>263
$a や $b を使った場合に、
実際に不具合が起こるケースにはどういうケースがあるでしょうか?
「これこれこういうことが起こりうるから使っちゃダメ」
みたいな具体例があれば教えていただきたく。
0344nobodyさん2006/01/30(月) 23:20:27ID:???
>>343
ヒント与えられてるんだから、調べろよw
0345nobodyさん2006/01/31(火) 00:05:32ID:???
WWW::Mechanizeって、対象ページはEUCのページしか無理なんでしょうか?
サンプルを見る限り、どれもEUCで書かれたページしか対象になってないので・・。
ShiftJIS対応のサンプルとかあれば、参考になるのでありがたいんですけど・・。
Encode.pm使ってコード変換とかしたらなんとかなります?
0346nobodyさん2006/01/31(火) 00:23:07ID:???
>>345
意味分からん。
データを取得するのに文字コードなぞ関係あるか。
0347nobodyさん2006/01/31(火) 00:28:18ID:???
昔からこのスレってこんなレベルだっけ?

#!/usr/bin/perl

use strict;
use WWW::Mechanize;

my $mech = WWW::Mechanize->new( autocheck => 1 );

$mech->get( "http://www.excite.co.jp" );

print "Content-type: text/html\n\n";
print $mech->content;
exit;
0348nobodyさん2006/01/31(火) 01:15:51ID:???
print "Content-type: text/html; charset=Shift_JIS\n\n";
03493452006/01/31(火) 01:22:22ID:???
>>346
データを取得するだけなら、Mechanizeじゃなくても・・。
フォームに自動入力させたり、リンクたどったりするために使いたいんですけど・・。
そのときに文字コードが関連してうまくいかなかったりするのかなぁと思って
聞いてみたんですけど・・。

見当違いの発言してますか?・・・多分してるんだろうなぁ・・。
0350nobodyさん2006/01/31(火) 01:53:08ID:???
>>349
見当違いと言うか、試す前に質問するのが間違いだな。
>>1
> 1: 自分はこういう事がしたい。
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。
03513472006/01/31(火) 03:09:04ID:???
>>349
いや、何となく意図は分かったが、
質問力と実践力の無さを婉曲的に指摘してみた。

EncodeでもJcodeでも
自分なりに試して、それでどうしてもダメだったら聞けば?

質問文に書かれている以上のことを
「おそらくこういうことが言いたいんだな」と想定してあげて、
もし質問者の意図と違ってたら、
回答者の労力って本当に無駄だよね。
0352nobodyさん2006/01/31(火) 03:13:54ID:???
だが、そこまでやれる人は初心者質問スレに来なくとも自力で解決できるw
ある意味矛盾ってやつですなw
0353nobodyさん2006/01/31(火) 03:19:58ID:???
>>345の問いに対する答えとして
>>347は適切だと思うが。
0354nobodyさん2006/01/31(火) 03:26:28ID:???
>>353
Mechを挙げた時点で、シンプルにページのデータ取得だけを目的としたものではないと
検討がつくはず。データ取得ならLWP::Simpleでもできる。

>>345
Spidering Hacksって本の最後のほうに解決策があるよ。ググってみて。
0355nobodyさん2006/01/31(火) 04:29:56ID:???
>>354
だから、何でわざわざ推測してやらにゃって話だろ?
書かれた問いに対しての回答としてひとつも間違っちゃいない
0356nobodyさん2006/01/31(火) 12:17:22ID:h8hzbfFv
>>355の性格が露呈してるな。
どんな性格かは言わずもがなだが。
0357nobodyさん2006/01/31(火) 12:58:54ID:FkRWAlIz
perlで認証付きサイトを構築しようと考えています。
まずlogin画面があり、認証後サイトを見れるという感じなのですが
認証後のサイトURL直入力などを防止する為にはどのような対応が良いのでしょうか?
idとパスワードを画面遷移ごとにpostデータとして送るというのはなんか
パスワードがソース内に表記されているという事で嫌な感じがしますが
一般的なのでしょうか?
最近のセキュリティソフトではリファラを出さないそうなのでこれも使用しない
方向で考えています。
どなたかお知恵を拝借願います。
0358nobodyさん2006/01/31(火) 13:04:36ID:???
>>357
Perl特有の話ではないのでスレ違い
0359nobodyさん2006/01/31(火) 13:06:20ID:???
>>357
http://www.shtml.jp/htaccess/basic.html
以上。
0360nobodyさん2006/01/31(火) 13:17:20ID:???
常にリファラを厳重にチェック
クッキー使用(クッキーにはユーザー名もパスワード名も入れない。セッションIDのみ)
0361nobodyさん2006/01/31(火) 13:47:37ID:???
> 常にリファラを厳重にチェック

Apache の仕事じゃね?
0362nobodyさん2006/01/31(火) 14:57:21ID:???
特定のページからしか飛べないページがあった場合、それはApacheの仕事ですかそうですか
なるほどね
すっごいや
0363nobodyさん2006/01/31(火) 15:00:06ID:???
>>362
別に間違っちゃいないが。
リファラ吐かないのならhtaccessに頼ろうがcgiに頼ろうが変わらないし。
0364nobodyさん2006/01/31(火) 15:06:55ID:???
>363
投稿確認のページ(例:index.php?exec=setcheck)があった際に、リファラは投稿ページ(例:index.php?exec=posting)である必要があるよね?
投稿確認ページでチェックするリファラが空であったり、投稿ページ(例:index.php?exec=posting)以外であればそれを弾く。
チェックとはそゆことを言ってます。
リファラ吐かない鯖なんて前提にしてません。
0365nobodyさん2006/01/31(火) 15:08:22ID:???
ついでに
>最近のセキュリティソフトではリファラを出さないそうなのでこれも使用しない
との事なのでリファラ取得が前提とした質問かな
(今気が付いたんだけどねorz)
0366nobodyさん2006/01/31(火) 15:17:37ID:???
だな。仕様書読めと。
0367nobodyさん2006/01/31(火) 15:20:18ID:???
>>365
逆じゃない? リファラ取得できない場合があるからリファラで判定したくないって
読めるんだけど
0368nobodyさん2006/01/31(火) 15:20:19ID:???
> 投稿確認のページ(例:index.php?exec=setcheck)があった際に、リファラは投稿ページ(例:index.php?exec=posting)である必要があるよね?

スパゲッティ得意?
0369nobodyさん2006/01/31(火) 15:21:37ID:???
>>364
リファラ吐くのは鯖じゃないぞー
0370nobodyさん2006/01/31(火) 15:22:56ID:???
>>359のBasic認証はスルーですかそうですか。
IDとパスワードがどんな形で渡すのかわからんが
場合によったら一番手っ取り早いだろ。
0371nobodyさん2006/01/31(火) 15:23:58ID:???
basic って、ssl かまさないと見放題だよな。
0372nobodyさん2006/01/31(火) 15:28:12ID:???
痛々しい>>364-366がいるのはこのスレですか?
0373nobodyさん2006/01/31(火) 15:50:26ID:???
>>371
それを言ったらSSL通らない通信はみんな信頼性にかけるし。

357がどれだけの信頼性が必要なのかがわからんけど、
仲間内だけで運営するとか、登録した人だけサイトが見られるとか
そんな感じなのであれば、Basic認証やらDigest認証で十分でしょ。
0374nobodyさん2006/01/31(火) 16:10:38ID:???
>>372
スマン、自分が仕様書読めてなかった。今は反省している。
0375nobodyさん2006/01/31(火) 16:12:43ID:???
んでだ、質問者はこねぇのか?
0376nobodyさん2006/01/31(火) 18:09:43ID:???
Win環境でファイルを新しい順にソートしようとしてるのですがうまくいきません

いろいろサンプルを見ながら試してて気が付いたのですが
(stat($file))[9] としたときに更新日付が帰ってきてませんでした

stat 以外でファイルのタイムスタンプを取得する方法ってありますか?
0377nobodyさん2006/01/31(火) 18:41:59ID:???
どうしてそこで自分の stat() の使い方のほうを疑わずに stat() の方を疑うのか?
0378nobodyさん2006/01/31(火) 18:49:59ID:???
>>376
更新日付が取れない事を変だと感じるが。
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq5.html#how_do_i_get_a_file_s_timestamp_in_perl
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item__i__X__i__FILEHANDLE
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_stat_FILEHANDLE

print
  map localtime($_->[1]) . " $_->[0]\n",
  sort { $b->[1] <=> $a->[1] }
  map [ $_, (stat)[9] ],
  glob './*'
;
0379nobodyさん2006/01/31(火) 19:18:30ID:???
んぁ〜ごめんなさい。明らかな自分のミスでした。
opendir(DIR, "./$datdir")
のようにしてファイル一覧を取得してからファイルのタイムスタンプを取得しようとしてたんですが、
stat("./$datdir/$file[$i]") のようにすべきなのにディレクトリを指定し忘れていただけでした。

回答をしていただいたのにくだらないミスで済みませんでした。
0380nobodyさん2006/01/31(火) 20:18:16ID:RrDOFj4a
掲示板CGIです。
Jcode.plを使って投稿時に含まれている半角カタカナは
全角カタカナに変換するようにしたのですが、
半角カタカナのみの投稿の場合動作しません。
これはなぜなんでしょうか?

該当部分のソース
 # S-JISコード変換
  &jcode'convert(*value,'sjis');
 #半角カタカナ変換
  &jcode'h2z_sjis(\$value);
これがフォームでコードの部分に入ってるだけ。
0381nobodyさん2006/01/31(火) 21:07:14ID:???
>>373 が必死な件について。
0382nobodyさん2006/01/31(火) 21:14:44ID:???
>>380
文字コード判定に失敗しているから
0383nobodyさん2006/01/31(火) 21:28:42ID:???
>>380
&jcode'convert(*value,'sjis');
を削除したら多分OK
0384nobodyさん2006/01/31(火) 22:12:12ID:POWreMm8
掲示板のログファイルの更新をする時、古いファイルを読みながら更新された内容を
新しいファイルlog_new.cgi書き込み、書き終わったところで古いファイルをlog_old.cgiに
rename、新しいファイルをlog.cgiにrenameとしました。

この方がメモリ使用量が少なく、書き込みの時に異常停止した場合ログ破壊が起こり
にくいと考えました。 しかしファイルのパーミッションを600にしたいのですが、open
では出来ず、sysopenでしか出来ないと知って困ってます。 パーミッションだけの
ためにファイルI/Oは全てsys*にしないとならないのでしょうか?
0385nobodyさん2006/01/31(火) 22:34:56ID:???
なんだか知らんが、権限なくてchmodができないってことかいな?
0386nobodyさん2006/01/31(火) 22:43:05ID:???
>>384
open してから書き出しはじめるまでの間に chmod すれば?
0387nobodyさん2006/01/31(火) 22:44:35ID:???
システムコールとライブラリ関数を併用したらまずいのって
バッファリングの問題なんだからsysopenだけなら他はシステムコールにしなくてもいいんでは?
実際perlfaq5で以下みたいな例文でてるし。(話題そのものは別のもの)

use Fcntl qw(:DEFAULT :flock);
sysopen(FH, "numfile", O_RDWR|O_CREAT) or die "can't open numfile: $!";
flock(FH, LOCK_EX) or die "can't flock numfile: $!";
$num = <FH> || 0;
seek(FH, 0, 0) or die "can't rewind numfile: $!";
truncate(FH, 0) or die "can't truncate numfile: $!";
(print FH $num+1, "\n") or die "can't write numfile: $!";
close FH or die "can't close numfile: $!";
03883862006/01/31(火) 22:48:57ID:???
>>387
じゃなくて、 open するときにパーミッションを指定できない、という話でないの?
0389nobodyさん2006/01/31(火) 23:06:49ID:???
>>388
がーん。そうでしたか。
sysopenだと他も全部システムコールにしなくちゃいけなくてイヤって言ってるのかと思いました。
387はスルーしてください。
0390nobodyさん2006/01/31(火) 23:21:07ID:???
>>384
sysopen とどちらが楽かは微妙だが、一時的に umask を変える。

my $orig_umask = umask 077;
blah, blah, blah...
umask $orig_umask;
0391nobodyさん2006/02/01(水) 00:00:28ID:???
>>380
結果が文字化けするなら分かるけど、
動作しないってのは分からん。

>>384
IO::FileかFileHandle使うと便利。
03923842006/02/01(水) 01:05:17ID:ngruutod
皆さんありがとうございます。 >>389さん、いやピンポンですよ。 sysopenで
openだけを入れ替えられるとは思いもしませんでした。 >>391も便利そうですね。
試してみます。
0393nobodyさん2006/02/01(水) 18:32:10ID:???
perl -W と実行すると
Use of uninitialized value in 〜
といったエラーが出てきました。
エラーが出た個所を見てみると
$in_method = $ENV{'REQUEST_METHOD'};
のように環境変数を代入してるほとんどでエラーが出ています。

環境変数から値を持ってくるときは = で代入しちゃいけないんでしょうか?
0394nobodyさん2006/02/01(水) 18:41:34ID:???
環境変数の中身が安全って信用出来ないからね。
正規表現でマッチさせて代入させればいいよ。
0395nobodyさん2006/02/01(水) 18:58:32ID:???
>>393
エラーメッセージの内容とそれが出ている行番号を確かめるんだ。
http://search.cpan.org/~nwclark/perl-5.8.8/pod/perldiag.pod#Use_of_uninitialized_value%s
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_defined_EXPR

#!/usr/local/bin/perl -W
use strict;
my $path = $ENV{'PATH'}; # 定義済の値
my $nvar = $ENV{'NONEXISTENT_VARIABLE'}; # 未定義の値
print "PATH:$path\n";
print "NVAR:$nvar\n";
__END__

>>394
それは -W じゃなくて -T 。
0396nobodyさん2006/02/01(水) 19:11:50ID:???
>環境変数の中身が安全って信用出来ない
ここに注目して、環境変数も中身がちゃんとあるかどうかチェックしながら代入するようにしてみました。
エラーは無くなったものの、面倒くさいなぁw
0397nobodyさん2006/02/01(水) 19:15:12ID:???
変えた手順書いてなかった

エラーのあったときの記述
$in_type = $ENV{'CONTENT_TYPE'};

修正した記述
$in_type = $ENV{'CONTENT_TYPE'} ? $ENV{'CONTENT_TYPE'} : "";

CONTENT_LENGTH のときは "" じゃなくて 0 を入れるようにした。
0398nobodyさん2006/02/01(水) 19:28:22ID:???
$in_type = $ENV{'CONTENT_TYPE'} or '';
$len = $ENV{'CONTENT_LENGTH'} or 0;
でもできるよ。

ただこの場合、偽の時は常に空になっちゃうから、
空文字列、0、未定義値を見分ける必要がある場合はやめたほうがよい。
0399nobodyさん2006/02/01(水) 19:31:21ID:???
>>396
コード自体を書き換えなくとも、未定義値の警告だけを出なくすればいい。
http://search.cpan.org/~nwclark/perl-5.8.8/pod/perllexwarn.pod

#!/usr/local/bin/perl
use strict;
use warnings qw(all);
no warnings qw(uninitialized);
print my $foo, 'foo!';
__END__

まぁ defined $var ? $var : '' するのが正道なので、これを機に全部
書き換える事をお勧めするが。
0400nobodyさん2006/02/01(水) 19:36:37ID:???
>>398
> $in_type = $ENV{'CONTENT_TYPE'} or '';
これは
($in_type = $ENV{'CONTENT_TYPE'}) or '';
こういう意味になる。

書くなら、
$in_type = $ENV{'CONTENT_TYPE'} || '';
$in_type = ($ENV{'CONTENT_TYPE'} or '');
このどちらか。
0もfalse扱いされるから扱いに注意。
0401nobodyさん2006/02/01(水) 19:44:29ID:???
>>400
おっしゃるとおりです。
||を言いたかったんですが、間違えました…。
0402nobodyさん2006/02/01(水) 19:52:46ID:???
同じのをつらつら書くの面倒&きれいじゃないと思ってたんで、
$in_type = $ENV{'CONTENT_TYPE'} || '';
って書き方がいいかなと思ったんですが、
>399さんの最後の一言を考えて、
$in_type = defined($ENV{'CONTENT_TYPE'}) || '';
っていうのじゃ駄目ですか?

とか書いた瞬間に駄目と気付いたw
defined を使うなら
$in_type = defined($ENV{'CONTENT_TYPE'}) ? $ENV{'CONTENT_TYPE'} : '';
ぐらいにしからないですかね。

とりあえず
$in_type = $ENV{'CONTENT_TYPE'} || '';
が見た目的にも、自分てきには見やすいかな
0403nobodyさん2006/02/01(水) 19:55:44ID:???
この些細なこだわりも利用者にはわからないorz
0404nobodyさん2006/02/02(木) 02:58:46ID:???
$test="a\b\c";
@k=split(/\\/,$test);
$testの中身を\で分割したいんだけど↑じゃできねぇ
何かいい方法ない?
0405nobodyさん2006/02/02(木) 03:08:11ID:???
$test='a\b\c';
0406nobodyさん2006/02/02(木) 03:25:12ID:???
いつもダブル使うからだめだったのか
>>405サンクス
0407nobodyさん2006/02/02(木) 14:40:58ID:???
$test="a\\b\\c";
0408nobodyさん2006/02/02(木) 23:57:22ID:6Tw8pfAF
Spidering Hackで
#!/usr/bin/perl -w
use strict;
use LWP 5.64;
my $word = shift;
$word or die "Usage: perl altavista_post.pl [keyword]\n";
my $browser = LWP::UserAgent->new;
my $url = 'http://www.altavista.com/web/results';
my $response = $browser->post( $url,
[ 'q' => $word, # the Altavista query string
'pg' => 'q', 'avkw' => 'tgz', 'kl' => 'XX',
]
);
die "$url error: ", $response->status_line unless $response->is_success;
die "Weird content type at $url -- ", $response->content_type
unless $response->content_type eq 'text/html';
if ( $response->content =~ m{ found ([0-9,]+) results} ) { print "$word: [RETURN]
$1\n"; }
else { print "Couldn't find the match-string in the response\n"; }
↑のようなコードが出てきたんでコピペしてDosプロンプトで実行したら
C:\Perl\bin>perl altavista_post.pl tarragon
http://www.altavista.com/web/results error: 302 Found at altavista_post.pl line 13.
のようなエラーが出ました。どこが間違ってるのでしょうか?
Windowsで通るようにするにはどうすればいいのでしょうか?
0409nobodyさん2006/02/03(金) 00:03:11ID:???
>>408
斜め読みだけど、302が返ってきてるからリダイレクト指示でしょ。
んで、そのスクリプト200以外の応答は全部エラーにしてるみたい。

というわけで、$urlの値の末尾に/つければいけるんじゃない。
0410nobodyさん2006/02/03(金) 00:07:29ID:PieRIOHf
>>408
Altavistaってまだあったんだw

このコードはどこでも動かないよ。 サイトの仕様が変わってる。見てみたらいまじゃ
Yahooに投げてるだけ。
04114082006/02/03(金) 00:11:00ID:HpXFHvtB
そうなんですか。。
即レスありがとうございました。>>409-410
0412無知ですまそ2006/02/03(金) 02:46:12ID:SfkSG4GR
他のスレを汚してしまってすみません。

パスワードチェックで

if ($FORM{'pass'} ne 'aaa') { &error("パスワードが違います"); }

としたのだけど、aaaとbbb以外は違うとするにはどうすればいいのか教えてください。

0413nobodyさん2006/02/03(金) 02:55:40ID:???
$FORM{'pass'} !~ /^aaa$|^bbb$/
0414無知ですまそ2006/02/03(金) 02:58:13ID:SfkSG4GR
ありがとさ〜ん(。・ω・)ノ♪
0415無知ですまそ2006/02/03(金) 03:02:22ID:SfkSG4GR
でけたーーーーーーありがとうございました!!
0416nobodyさん2006/02/03(金) 07:47:24ID:???
>>412
if ($FORM{'pass'} ne 'aaa' || $FORM{'pass'} ne 'bbb')
0417nobodyさん2006/02/03(金) 08:59:55ID:???
>>416
をいw
0418nobodyさん2006/02/03(金) 10:40:30ID:???
my %valid_pass = ("aaa" => 1, "bbb" => 1);
unless ($valid_pass{$FORM{'pass'}}) { &error("..."); };
0419nobodyさん2006/02/03(金) 12:33:50ID:???
そういえばunlessって使うと読みづらくなるってのを見て以来
こつこつとif文しか使ってないや。
0420nobodyさん2006/02/03(金) 13:25:53ID:???
使い分けるより1つに絞った方がいい
っていうだけのことじゃなくて?
04214182006/02/03(金) 15:53:17ID:???
俺の場合、条件式に否定が含まれてるときは混乱するので unless は使わないが、
条件式が単純な場合は unless の方が「〜でない」という意図がハッキリ伝わる
ような気がするので unless を使うようにしている。

変かな?
0422nobodyさん2006/02/03(金) 16:10:15ID:???
使い分けに意図を載せることができればいいんだよ。
0423nobodyさん2006/02/03(金) 19:06:09ID:???
if ( hoge ) { unko; }
if ( not hoge ) { kuso; }

しか使わない漏れが来ましたよ。
0424nobodyさん2006/02/03(金) 19:52:16ID:???
>>421
>>418は読みやすいというか、わかりやすいからいいんでない?
0425nobodyさん2006/02/03(金) 19:55:23ID:???
>>423
別にまってねーよ。
0426nobodyさん2006/02/04(土) 14:26:20ID:???
>>421
せっかくあるんだし、そういう条件付ならいいかも。
ただ、ほとんどの場合は if + !式 の組み合わせの方が
タイプが少なくて済むんだよね。
until は while と同じだからいいんだけど。
0427nobodyさん2006/02/04(土) 14:29:47ID:???
>423は
if ( hoge ) { unko; } else { kuso; }
でいいんじゃないのか?
0428nobodyさん2006/02/04(土) 15:04:46ID:???
>472
この二つのパターンしか使ってないよ
っていう意味じゃないの?
0429nobodyさん2006/02/04(土) 23:39:17ID:???
AAA
 BBB
  CCC
  DDD
EEE

↓

├AAA
│  └BBB
│    ├CCC
│    └DDD
└EEE

階層は無限。
どういうコーディングすればよいのかちょっと分からないのでお助けを...
0430nobodyさん2006/02/05(日) 00:37:52ID:???
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
0431nobodyさん2006/02/05(日) 01:13:47ID:???
エスパーマミ登場
たぶんインデントされたものを罫線付きで表示したい
って意味だと思うの
0432nobodyさん2006/02/05(日) 01:15:08ID:???
再起処理でディレクトリとファイル一覧を取得して、
階層数を記憶しておいて、それに見合った「│ 」やら「└」を出力すればおk
0433nobodyさん2006/02/05(日) 01:37:06ID:???
ディレクトリ階層でなくてただの文字列だと思うの
04344292006/02/05(日) 02:17:56ID:???
説明不足でゴメンナサイ。
やりたいことは、エスパー魔美タンの言う通りです。>>431 >>433

行毎に文字列が書かれている
インデント無しなら1階層目、インデント1つなら2階層目、インデント2つなら3階層目・・・∞
「│」「├」「└」を使用して全て繋がっている木構造を出力する

かなりの難問です。スミマセン。
0435nobodyさん2006/02/05(日) 02:18:04ID:???
必要なところだけ罫線を上書きする感じ。
うーん、汚い。

my @result;
my $maxdepth = 0;
while(<DATA>){
/( *)(.*)/s;
my $depth = length $1;
push @result, [(" ")x($depth+1), $2];
$maxdepth = $depth if $maxdepth < $depth;
}

for my $d ( 0 .. $maxdepth ){ # $d=注目階層
my @class = grep { 2+$d == scalar @{$result[$_]} } 0..$#result;

$result[$_][$d] = "┃" for $class[0] .. $class[-1];
$result[$_][$d] = "┣" for @class;
$result[ $class[-1] ][$d] = "┗";
}
print join '',@$_ for @result;
__DATA__
AAA
BBB
CCC
DDD
EEE
04364292006/02/05(日) 02:36:19ID:???
難問に挑んでいただき、ありがとうございます(ペコリ)
デキタ!と思ったら反例が見つかったのでご報告。スミマセン

AAA
 BBB
  CCC
  DDD
 EEE
  FFF
GGG
0437nobodyさん2006/02/05(日) 03:05:55ID:???
A
AB
ABC
ABD
ABE
ABEF
G
ループしながらスタックでこんなの作ってやれば
親が末っ子かどうかで" "か"┃"を塗り分けて
自分が末っ子かどうかで"┗"か"┣"を塗り分けられそうだ
後はパス
0438nobodyさん2006/02/05(日) 03:38:38ID:???
一気にやるんじゃなくて、再起を使えばかんたんじゃないの?
んで再起で呼ぶときに行頭のスペースの数を渡してやって、それに一致しなければ抜けるようにすればいい
と思う

明日中に解決してなければ、まぁ微妙に面白そうだしやってみようかなとか思う
0439nobodyさん2006/02/05(日) 07:20:36ID:V48VHYZU
質問です

1.$wordの文字列から6バイト目以降か7バイト目以降を削除したい
2.5バイト目が半角英数字なら6バイト目以降を削除(つまり1〜5バイト目残し)
3.5バイト目が日本語コードなら7バイト目以降を削除(つまり1〜6バイト目残し)

どうやれば一番効率がいいですか?
0440nobodyさん2006/02/05(日) 08:54:14ID:???
Perlメモ熟読して来い
0441nobodyさん2006/02/05(日) 09:45:39ID:???
>>429
my $level = -1;
my @stack;
my $base = (my $p = [['*root*', []]]);

while(<DATA>){
m/^( *)(.*)$/;
my $count = length($1);
if ($count > $level){
$count > ($level+1) and die "Illegal data.";
push(@stack, $p);
$p = @{$p}->[-1]->[1];
} elsif ($count < $level){
foreach(1..($level-$count)){
$p = pop(@stack);
}
}
$level = $count;
push(@{$p}, [$2, []]);
}
array_dump($base->[0]->[1], '');
04424412006/02/05(日) 09:48:46ID:???
sub array_dump
{
my ($p, $marker) = @_;
my $mark = ['├', '│'];
foreach(0..$#{$p}){
$_ == $#{$p} and $mark = ['└', ' '];
print $marker, $mark->[0], $p->[$_]->[0], "\n";
@{$p->[$_]->[1]} and array_dump($p->[$_]->[1], $marker. $mark->[1]);
}
}
__END__
AAA
BBB
CCC
DDD
EEE
FFF
GGG
0443nobodyさん2006/02/05(日) 10:33:20ID:V48VHYZU
>>441さん>>439にもアドバイスを・・


$word =~ s/^....[0-9]/^...../g; …?
0444nobodyさん2006/02/05(日) 10:48:12ID:???
>>443
>>440

アドバイス出てるじゃん。
0445nobodyさん2006/02/05(日) 11:27:05ID:V48VHYZU
>>444
だめぽなんです
0446nobodyさん2006/02/05(日) 11:35:15ID:V48VHYZU
>>445
あれ書きかけで送信してしまった
いちおう自分でどうにか書いたんですが\x81が
おかしくなるんですよね


$words = substr($word,0,6);

if ($words =~ m/^....[\x20-\x7f\xa0-\xdf]/)
{
$words = substr($words,0,5);
}else {
$words;
}
0447nobodyさん2006/02/05(日) 11:40:22ID:???
だから「熟読」して恋と小一時間(ry
0448nobodyさん2006/02/05(日) 11:45:31ID:V48VHYZU
>>447
”どこを”ですか?
0449nobodyさん2006/02/05(日) 11:47:52ID:???
刹那主義ですなあ
0450nobodyさん2006/02/05(日) 12:01:05ID:V48VHYZU
>>449
>>448
0451nobodyさん2006/02/05(日) 12:17:55ID:???
帰って下さい。
0452nobodyさん2006/02/05(日) 12:21:46ID:V48VHYZU
>>450
>>451

つーかおまい分からんのだろw
0453nobodyさん2006/02/05(日) 12:48:54ID:???
なんだ、釣りかよ。
0454nobodyさん2006/02/05(日) 12:51:06ID:???
どうせ切ろうとした部分がマルチバイト文字かどうかの判定もできんのだろう
正規表現を使うことすら頭に出てこないお子様なんだろうがな

おっと触っちまった、以下スルーよろ
0455nobodyさん2006/02/05(日) 13:12:20ID:EWGu37QN
>>57ってたいした知識ないんだな。
その程度の知識でいきがってるようじゃw
0456nobodyさん2006/02/05(日) 13:25:38ID:???
2週間以上&400も前のレスにレスつけてる455が居るスレはここですか?
0457nobodyさん2006/02/05(日) 13:29:19ID:???
きっとノルマがあるんだよ。なりふり構ってられないんだろう。
0458nobodyさん2006/02/05(日) 13:34:12ID:???
ID表示しながら自演とか、なかなか図太い神経してますね(>_<)
04594292006/02/05(日) 22:55:31ID:???
>>441-442
華麗なコーディングありがとうございました。
完璧です。多重配列を使いこなせる人はスゴイ。

自分もいろいろと考えてみた結果
・自分の状態("└"か"├")
・自分の全ての親の状態("│"か" ")
が分かれば木構造が作れるのに気付いたので

1. 逐次走査して全項目の状態("└"か"├")を調べて記録する
2. もう一度逐次走査して親の情報を作りながら木構造を作っていく
とすることで目的の処理ができました。(再帰と多重配列は使わず)

お世話になりましたー。
0460nobodyさん2006/02/06(月) 11:55:45ID:kZ4iy7FB
質問です
htmlのtextareaの内容を入力として、外部の実行ファイル(例えばsort等)に投げて、
htmlとして出力を得るような方法はありますか?
perlコーディングと関係ないかもしれませんがよろしくお願いします。
0461nobodyさん2006/02/06(月) 12:16:51ID:???
>>460
>>1
> 1: 自分はこういう事がしたい。
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。

■こんなCGI作ってください■ Part.2
http://pc8.2ch.net/test/read.cgi/php/1133361560/
0462nobodyさん2006/02/06(月) 18:28:41ID:???
>>459
そのコードを見てみたかったな。
考えてみたけど、こんなのしか考えつかなかった。
my @data;
my $max = -1;
while(<DATA>){
m/^( *)(.*)$/;
my $level = length($1);
push(@data, [$level, $2, '']);
($level > $max) and $max = $level;
}
foreach my $level (0..$max){
my $found = 0;
foreach(reverse(0..$#data)){
if ($data[$_]->[0] < $level){
$found = 0;
} elsif ($data[$_]->[0] == $level){
$data[$_]->[2] .= ($found ? '├' : '└');
$found = 1;
} else {
$data[$_]->[2] .= ($found ? '│' : ' ');
}
}
}
foreach(0..$#data){
print @{$data[$_]}[2, 1], "\n";
}
04634292006/02/06(月) 23:52:11ID:???
お世話になったので公開。大したモノでなくスレ汚し申し訳ない。
#勉強がてらに多重配列を使ってみました

while (<DATA>) {
    m/^( *)(.*)$/;
    $now = length $1;
    push @data, [$now, $2, 0]; # [階層の深さ, 項目名, "├"なら0、"└"なら1]
    $tmp[$now] = $.-1; # 階層毎に一番最後に出現した行の「行番号-1」を記録
    $max = $now if $now > $before;

    if ($now < $before) {
        $data[$tmp[$_]][2] = 1 for $now+1..$max;
        $max = $now;
    }
    $before = $now;
}
$data[$_][2] = 1 for @tmp;

$before = 0;
@tree = ('│', ' ', '├', '└');
for (0..$#data) {
    $now = $data[$_][0];
    if ($now > $before) { push @parent, $data[$_-1][2]; }
    elsif ($now < $before) { pop @parent for 1..$before-$now; }
    print $tree[$_] for @parent;
    print $tree[$data[$_][2]+2], $data[$_][1], "\n";
    $before = $now;
}
0464nobodyさん2006/02/07(火) 01:09:36ID:???
>>463
なるほど。
> if ($now < $before) {
> $data[$tmp[$_]][2] = 1 for $now+1..$max;
> $max = $now;
> }
この処理で、一回のループで行けるわけですね。
ありがとう。
0465nobodyさん2006/02/07(火) 06:10:53ID:wug3jbil


1: 自分はこういう事がしたい。→ 計算機
2: それでこんな風にやってみたが・・・ → やってみましたけど…
3: こんなエラーが出て上手く行かなかった。
 → 2**64 = 1.84467440737096e+019

実数ではなくてこんななっちゃいましたorz
アドバイスお願いします
0466nobodyさん2006/02/07(火) 06:19:53ID:???
bigint
0467nobodyさん2006/02/07(火) 06:28:08ID:wug3jbil
>>466
こんな時間にありがとうございます

多倍長整数なんて初めて聞きました
bigintをどうすればおkなんでしょうか?
0468nobodyさん2006/02/07(火) 06:28:57ID:???
use bigintすればOK
0469nobodyさん2006/02/07(火) 06:32:44ID:wug3jbil
>>468
#!/usr/bin/perl
use bigint

↑たったこれだけっすか?

0470nobodyさん2006/02/07(火) 06:35:16ID:???
そうだよ
";" を忘れずに
0471nobodyさん2006/02/07(火) 06:38:16ID:???
感動した。

$ perl -e "use bigint;print 2**64;"
18446744073709551616
0472nobodyさん2006/02/07(火) 06:39:39ID:wug3jbil
>>470
ん〜エラーになるんですよね…


Error 500
CGI エラー - Content-Type ヘッダが正しくありません。
CGI 出力メッセージ:

Can't locate bigint.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .)
at C:\httpd\www\tes.cgi line 3.
BEGIN failed--compilation aborted at C:\httpd\www\tes.cgi line 3.
0473nobodyさん2006/02/07(火) 06:41:39ID:???
>>472
                      ____    、ミ川川川彡
                    /:::::::::::::::::::::::::""'''-ミ       彡
                   //, -‐―、:::::::::::::::::::::三  ギ  そ  三
            ___    巛/    \::::::::::::::::三.  ャ  れ  三
        _-=三三三ミミ、.//!       l、:::::::::::::三  グ  は  三
     ==三= ̄      《|ll|ニヽ l∠三,,`\\::三  で       三
        /              |||"''》 ''"└┴‐` `ヽ三   言  ひ  三
         !             | /          三   っ  ょ  三
       |‐-、:::、∠三"`    | ヽ=     U   三.  て   っ  三
       |"''》 ''"└┴`       | ゝ―-        三  る  と  三
       | /           ヽ ""        ,. 三   の   し  三
        | ヽ=   、    U    lヽ、___,,,...-‐''"  三   か  て  三
.        | ゝ―-'′          |  |::::::::::::_,,,...-‐'"三  !?    三
          ヽ ""        ,.    | | ̄ ̄ ̄      彡      ミ
        ヽ、___,,,...-‐''"  ,,..-'''~             彡川川川ミ
          厂|  厂‐'''~      〇
        | ̄\| /
0474nobodyさん2006/02/07(火) 06:44:04ID:wug3jbil
>>473
いやマジッス!
つーかクロ高のAAワロスw


>>472はhttpdでローカルで試した結果です
0475nobodyさん2006/02/07(火) 06:52:10ID:???
Perl5.8入れてみよう
0476nobodyさん2006/02/07(火) 06:55:34ID:wug3jbil
use Math::Bigint;
もダメぽ・・

5.6…だたよママン
0477nobodyさん2006/02/07(火) 13:36:58ID:???
たまに釣られてみるのも悪くは無いかな・・・

print "content-type: text/plain; charset=Shift_JIS\n\n";
Shift_JIS のところは編集してるファイルの文字コードにあわしてね
0478nobodyさん2006/02/07(火) 13:44:22ID:???
>>477
いや、
>Can't locate bigint.pm
のところが問題なんじゃないのか?
0479nobodyさん2006/02/07(火) 14:04:11ID:???
回答者も初心者かよ
いい加減にしろよ
0480nobodyさん2006/02/07(火) 14:26:12ID:???
anhttpdはCGIの動作は怪しいからapache入れた方がいい
それかコンソールで確認するか…
0481nobodyさん2006/02/07(火) 14:33:11ID:???
アクティブパールでローカル上でcgiを走らせているんですが、
require "./jisaku.pl";
などファイルをインクルードする文を実行する命令を付け足すと、画面が真っ白になってどうにもなりません。
require命令を消して実行すると上手くいきますが、
どうしてもファイルを分割してコーディングしたいです。
どうにかなりませんか。
0482nobodyさん2006/02/07(火) 14:36:58ID:???
jisaku.plから呼び出し元の関数呼んでたり、無い関数を呼んでたりしてない?
04834812006/02/07(火) 14:50:54ID:???
>>482
してません。
私は、新しく作るサブルーチンは全てメインファイルに記述し、
動作確認ができてから分割するという習慣をとっていますし、
jisaku.plから呼び出し元の関数を呼んでいたりはしません。

で、気づいたんですが、kentwebさんのlight.cgiを見てみると
require命令にシングルクォートを使っているので、もしかしたらダブルクォートを使ったのが
いけなかったんじゃないか・・・と思います。
でももうコーディングする時間がないので誰か誰かあああぁぁぁぁぁん。
0484nobodyさん2006/02/07(火) 15:04:53ID:???
とりあえずログ晒せよ
0485nobodyさん2006/02/07(火) 15:35:07ID:???
>>483
jisaku.plが真を返してないとか。
jisaku.plの最後に1;って書いてみ
0486nobodyさん2006/02/07(火) 15:35:38ID:???
>>429
ツリーって下から考えたら楽じゃね?

my @data = reverse <DATA>;
my (@tree, @rule, $depth);
foreach (@data) {
/^( *)(.+)/;
$#rule = $depth = length($1);
$rule[$_] = !!$rule[$_] for 0 .. $depth-1;
$rule[$depth] = 2 + !$rule[$depth];
unshift @tree, join '', (' ','│','├','└')[@rule], $2, "\n";
}
print @tree;
0487nobodyさん2006/02/07(火) 15:50:34ID:???
>>476
bigint プラグマが用意されたのは 5.8.0 から。
http://search.cpan.org/~nwclark/perl-5.8.8/pod/perl58delta.pod#New_Modules_and_Pragmata

Math::Bigint の使い方はドキュメントを。
http://search.cpan.org/~tels/Math-BigInt-1.77/lib/Math/BigInt.pm

>>481
君のスクリプトの二行目に
use CGI::Carp qw(fatalsToBrowser);
を挿入し、出てきたエラーメッセージを読んで解決なさいな。
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI/Carp.pod
http://search.cpan.org/~nwclark/perl-5.8.8/pod/perldiag.pod
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_require_EXPR
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldata.html#Scalar_value_constructors
0488nobodyさん2006/02/07(火) 16:22:17ID:???
楽しい初心者サークルでつね。
0489nobodyさん2006/02/07(火) 16:24:47ID:???
自分のスクリプト否定されたからって「〜でつね」とか書くな
0490nobodyさん2006/02/07(火) 20:42:51ID:???
perlの解説書読むと、日本語とか、ちゃんとUTF8でエンコードしてやり取りしなさい
って書いてあるんだけど、そんなことしなくてもちゃんと動くし最後のhtml出力でシフトJISに指定やれば
問題なく表示されますよね。
なんかやるメリットってあるんでしょうか?
0491nobodyさん2006/02/07(火) 20:48:18ID:???
>>490
それなんて解説書?
0492nobodyさん2006/02/07(火) 20:52:59ID:???
>>491
ハーシー 速攻図解プログラミング Perl/cGI
です。
0493nobodyさん2006/02/07(火) 20:57:09ID:???
まあ別にUTF-8に越した事はないが・・
0494nobodyさん2006/02/07(火) 21:03:41ID:???
>>490
起き得る不都合とその回避方法を把握しているなら、別にどの
文字コードでスクリプトを書こうが問題無い。

ただ、今の perl は UTF-8 を前提に動いているし、UTF-8 なら
Shift_JIS を直接扱う時のように ASCII とのバッティングが起こら
ないし、EUC-JP は日本ローカルな文字コードであるのに対し
UTF-8 は世界的に使われている文字コードなので、まだ UTF-8
の認知度が低かった数年前ならともかく、現時点でこれら3つの
中から選ぶなら UTF-8 が「無難な選択」になる。
0495nobodyさん2006/02/07(火) 21:15:58ID:???
utf8前提だったら、use utf8なんてなくなってるよ。
テキスト処理で速度が必要な場合は、その文字コード用に
コード書いた方が断然よい。前にJISのテキスト処理をutf8で
やったら、変換に時間かかりすぎて使い物にならなかった。
0496nobodyさん2006/02/07(火) 22:07:16ID:???
> テキスト処理で速度が必要な場合は、その文字コード用に
> コード書いた方が断然よい。

> 前にJISのテキスト処理をutf8で
> やったら、変換に時間かかりすぎて使い物にならなかった。

頭大丈夫?
0497nobodyさん2006/02/07(火) 23:33:23ID:???
メール送信フォームを作っています。

#名前
<tr>
<td class=r align=right width=110>名前 <font color=red>※</font></td>
<td class=r width=440>
<input type=text name=name size=30 style='ime-mode:active' value="$cnam"></td>
</tr>


# 項目1
print "<input type=radio name=hoge value=\"A\" checked>A \n";
print "<input type=radio name=hoge value=\"B\">B \n";


リターンメールで
$mbody .= "名 前 = $in{'name'}\n";
はメールの本文にちゃんと出るのに

$mbody .= "項目1 = $in{'hoge'}\n";
は表示されません。。

考えられるミスがわかる方ご指摘お願いいたしまするー
0498nobodyさん2006/02/07(火) 23:44:44ID:???
端折ってソースさらしてるのは「お前らエスパーなんだろ?読みとれや」ってことですか?
0499nobodyさん2006/02/07(火) 23:49:25ID:???
答えられる人はいないのですか?
0500nobodyさん2006/02/07(火) 23:57:58ID:???
>>497
> 考えられるミスがわかる方ご指摘お願いいたしまするー
考えられる可能性は1つしかない

> $mbody .= "名 前 = $in{'name'}\n";

とエディタで書いた後でソースを保存したが

> $mbody .= "項目1 = $in{'hoge'}\n";

と書いた後でまだ保存してない。
0501nobodyさん2006/02/08(水) 00:21:10ID:???
$in{'hoge'} の中身を print するなりしてちゃんと確かめてみるが良かろう
0502nobodyさん2006/02/08(水) 01:09:27ID:???
両方チェックOnすると hoge って name で2つPOSTされるね。
$in{'hoge'}にABとでも入ってほしいのかの。
フォームのデコード処理が甘いと空になっちゃうかもね。
05034972006/02/08(水) 01:15:50ID:???
あげてみますた。

http://s1.muryo-de.etowns.net/~testjoy/order.txt

これの # 配達方法 が メールで返ってきたときに空白なんですよ。。
なぜかしら?
0504nobodyさん2006/02/08(水) 01:48:32ID:???
>>503
init.cgi が見れないと分からん。
以後は下のスレにでも移動してくれ。

自分の作ったCGIスクリプトをデバッグするスレ
http://pc8.2ch.net/test/read.cgi/php/1011174442/
0505nobodyさん2006/02/08(水) 01:57:25ID:???
BASIC レベルのウンコスクリプトを書く人と、
モジュールわんさかのスクリプトを書く人の
2種類しかいない Perl 界隈。
0506nobodyさん2006/02/08(水) 02:03:33ID:???
前者はともかくとして、後者は何か問題なのか?
0507nobodyさん2006/02/08(水) 02:19:56ID:???
モジュールを再発明する人も含めて3種類。
0508nobodyさん2006/02/08(水) 02:51:38ID:???
二極化している、と言いたいんじゃないか?
0509nobodyさん2006/02/08(水) 03:17:07ID:???
広告挿入されまくりでソースがファオアフォになってるw
0510nobodyさん2006/02/08(水) 04:20:34ID:???
>>508
どこで差がついちゃうのか、何が分かれ目になるんだろうねえ?
0511nobodyさん2006/02/08(水) 04:34:41ID:???
あるものは使え(中身が分からなくても動くならOK)
コピペしてでも自分のソースに必要最小限だけしか入れたくない

じゃないのかな
0512nobodyさん2006/02/08(水) 22:25:24ID:VDqpPhRj
任意の時間(単位=秒)をフォームに入力、
それを年、月、日、時、分、秒 で返したいんですがどのようにするといいですか?



0513nobodyさん2006/02/08(水) 22:28:04ID:???
>>512
秒っていつからの秒だよ
とりあえず

■こんなCGI作ってください■ Part.2
http://pc8.2ch.net/test/read.cgi/php/1133361560/
0514nobodyさん2006/02/09(木) 00:56:03ID:???
>>513
任意
~~~~~
0515nobodyさん2006/02/09(木) 01:57:20ID:???
>>514
ここは禅問答する場所か?
0516nobodyさん2006/02/09(木) 02:07:08ID:???
素人が多くなったな
0517nobodyさん2006/02/09(木) 04:00:41ID:???
>514
任意ってのは好きな時間を入力できるって意味で、何時の時間を基準とするかが示されていない
1970が基準とするならgmtimeでもlocaltimeでも好きなのを使え
1970以前なら・・・俺にゃわからんので他の人おながい
0518nobodyさん2006/02/09(木) 04:04:11ID:I2pVJ8U2
掲示板を作成していて書き込んだ内容を管理人が自由に削除したり出来るようにしたいのですが
ソースから消すのはもちろん簡単ですが、サイト上からそれを削除できるようにしたいのです

●●.datというファイルから特定の行を削除orそれ以外を保存するというのはどういった方法がいいのでしょうか?
先輩方のご指南よろしくお願いいたします
0519nobodyさん2006/02/09(木) 04:04:46ID:???
起算する日時が1970年以降なら、
起算する日時分の秒数を足してlocaltime()なんかで変換。
0520nobodyさん2006/02/09(木) 04:18:22ID:???
>>517>>519
123456789秒は年、月、日、時、分、秒?
0521nobodyさん2006/02/09(木) 04:23:52ID:???
>>518
下の段落だけ読めたので、そこに反応すると、
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_do_I_change_one_line_in_a_fi
とかTie::Fileとか、巷に落ちてる掲示板のスクリプトを読めばおk
0522nobodyさん2006/02/09(木) 04:26:27ID:???
>520
localtime(GMT+9) → 1973/11/30(Fri) 06:33:09
gmtime → 1973/11/29(Thu) 21:33:09
05235222006/02/09(木) 04:27:34ID:???
1970年が起算の場合ね
0524nobodyさん2006/02/09(木) 04:39:55ID:???
>>523
localtimeやtime以外の話

123456789秒は年、月、日、時、分、秒?
05255242006/02/09(木) 05:17:43ID:???
>>522
ああそうか1970を引けばいいのか
でも123456789秒から1973/11/30(Fri) 06:33:09をどうやって?
0526nobodyさん2006/02/09(木) 05:57:10ID:???
>>518
open F, "+<●●.dat" or die $!;
flock F, 2;
my @data = <F>;
splice @data, 特定の行, 1;
seek F, 0, 0;
print F @data;
truncate F, tell F;
close F;
05275242006/02/09(木) 07:09:53ID:???
ああそうか俺がバカだった…


1: 任意の“秒”$unkotimeから分・時間・日・月・年を求めたい
2: それでlocaltime($unkotime)でやってみたが
3: 以下のようになった

・$yearから70を引いた → 100年を超えないときはおkだけど100年で“-70年”になる
・$hourから-9 → “-3”時などになる
・$wdayから-1 → 現在のところ支障なし(?)に見えるが…

ちなみに鯖は国内です
0528nobodyさん2006/02/09(木) 08:10:50ID:???
普通に計算したら?
($unkotime % 60)←秒
(int($unkotime / 60) % 60)←分
もっと簡単な書き方あるかもしれないが、こんな感じであとは自分で考えれ。
0529nobodyさん2006/02/09(木) 09:04:42ID:???
で、60日は何月なのよ?
0530nobodyさん2006/02/09(木) 10:20:40ID:???
そもそも、普通に既存のスクリプトでないのか?
0531nobodyさん2006/02/09(木) 14:06:01ID:???
適当に作ってみた。
mygmtime_presetを起算日として、gmtime互換の日付を返す。
1970,1,1を渡すとgmtimeと同じ動きをする(はず)。

use Date::Calc qw(Add_Delta_Days Day_of_Week Day_of_Year);

my $gmtime_ad = mygmtime_preset(1, 1, 1);
print join(" ", $gmtime_ad->(123456789)), "\n";
exit;

sub mygmtime_preset
{
my @base = @_;
return sub {
my $sec = shift;
my @date = Add_Delta_Days(@base[0..2], $sec/(24*60*60));
my $wday = Day_of_Week(@date);
my $yday = Day_of_Year(@date)-1;
$date[0] -= 1900;
--$date[1];
return ((gmtime($sec%(24*60*60)))[0..2], reverse(@date), $wday, $yday, 0);
};
}
0532nobodyさん2006/02/09(木) 14:18:34ID:46AFp3BF

ファイルの中にある“。”と“、”の数を数えたいんですけど

$word=~ /。/g;

だと・・
どうすればいいですか?
0533nobodyさん2006/02/09(木) 14:23:27ID:???
while ($word =~ /。/g) { $count++; }
0534nobodyさん2006/02/09(木) 14:41:50ID:46AFp3BF
>>533
ありがとうございます

$文字数 = $word;
$文字数 = s/。/。/g;

ってのはおすすめできないんでしょうか?
0535nobodyさん2006/02/09(木) 14:52:24ID:???
PCで普通に日本語が使えるようになってからの世代には手を焼く。
0536nobodyさん2006/02/09(木) 15:07:47ID:???
それとこれとは関係なかろう。
0537nobodyさん2006/02/09(木) 17:37:51ID:???
変数名に日本語使えたら楽でいいなぁ。
勿論自分で使うの限定で。
05385222006/02/09(木) 17:43:50ID:???
>>532
$cnt = $word =~ /。/g;
でOK
0539nobodyさん2006/02/09(木) 18:05:06ID:???
>>537
use utf8; とはいえ変換する分煩雑じゃないか?
0540nobodyさん2006/02/09(木) 18:12:47ID:???
>>539
うん、確かに煩雑だけど、それを補って余りあるぐらい見やすいかなと。
あとは、変数名考えるのも結構大変だしねw
0541nobodyさん2006/02/09(木) 18:28:53ID:???
>537
そんなあなたにはjavaがお勧め
0542nobodyさん2006/02/09(木) 20:02:23ID:???
>537
そんなあなたにはrubyがお勧め
0543nobodyさん2006/02/09(木) 20:05:35ID:???
rubyで日本語使えるんだ。
初めて知った。
0544nobodyさん2006/02/09(木) 21:15:33ID:???
日本語の変数名が見やすいとか言う感覚がさっぱり理解できん。
0545nobodyさん2006/02/09(木) 21:24:19ID:???
my ($kaunnta-, $hennsuu, $jikann);
0546nobodyさん2006/02/09(木) 21:28:43ID:???
perlを勉強し始めたばかりの者ですが、
連想配列というものは$xx{文字列}と定義すると書いてあるのですが、文字列はクォーテーションで囲っている物を文字列というのですよね?
ということは$xx{"soeji"}のように定義するのでよいのでしょうか?

よろしくお願いしますm(_ _)m
0547nobodyさん2006/02/09(木) 21:33:18ID:???
>>546
うん
後裸のワードでぐぐれ
0548nobodyさん2006/02/09(木) 21:38:22ID:???
つまり$xx{soeji}でも認識できるけど、文法上よくはないということですね…

どうもありがとうございました!m(_ _)m
0549nobodyさん2006/02/09(木) 21:39:19ID:???
>>547
裸のワードとは違うけどね。
0550nobodyさん2006/02/09(木) 21:40:19ID:???
>>548
いやいや、文法上良いの。
0551nobodyさん2006/02/09(木) 21:56:50ID:???
>>549-550
0552nobodyさん2006/02/09(木) 21:58:17ID:???
アクセスした人の環境変数を全てtextに書いていくプログラムを書いたのですが、
 #!/usr/local/bin/perl
 
 print "Content-type: text/html\n\n";
 open(DATA, ">> data.dat");
 print(DATA "%ENV<HR>\n");
 close(DATA);
 exit;

エラーが出て動きません。
自分ではこのソースに間違いを見つけられないのですが、その他パーミッションなどの設定のほうを疑うべきでしょうか…?
お願いしますm(_ _)m
0553nobodyさん2006/02/09(木) 22:00:39ID:???
>>552
何でもカッコつけりゃいいってもんじゃないってこと。
0554nobodyさん2006/02/09(木) 22:02:20ID:???
どういうことですか…?
0555nobodyさん2006/02/09(木) 22:09:16ID:???
コンマが足りない
0556549=5502006/02/09(木) 22:16:00ID:???
>>551
ん?何かまずいこと言った?
らくだ本にも、
> 次のような記法 (中略) で使われる裸の識別子は、裸のワードとは見なされない。
> なぜなら、これらは「文法的にほかに解釈がない」のではなく、
> 規則によって陽に許される書き方だからである。
って書いてるよ。
0557nobodyさん2006/02/09(木) 22:19:08ID:???
はいはいわろすわろす
0558nobodyさん2006/02/09(木) 22:35:43ID:???
>>552
パーミッションじゃない?
open() のとこをこんな風にしてエラーメッセージを出させてみては?

unless (open(DATA, ">> data.dat")) {
print "Open error: $!\n";
exit;
}
0559nobodyさん2006/02/09(木) 23:12:20ID:???
>553
クイズにヒントを出して楽しむ場所じゃ有りません

>552
 print "Content-type: text/plain\n\n";
 open(DATA, ">>data.dat");
 print DATA "%ENV<HR>\n";
 close(DATA);
 print "output ok\n";
 exit;
0560nobodyさん2006/02/09(木) 23:17:44ID:???
>>559
0561nobodyさん2006/02/09(木) 23:21:13ID:???
>>560
0562nobodyさん2006/02/09(木) 23:21:28ID:???
はいはいわろすわろす
0563nobodyさん2006/02/09(木) 23:22:22ID:???
はいはいわろすわろす
0564nobodyさん2006/02/09(木) 23:26:16ID:???
はいはいわろすわろす
0565nobodyさん2006/02/09(木) 23:26:53ID:???
>562-564
0566nobodyさん2006/02/09(木) 23:26:57ID:???
webprog板らしい流れだな
0567nobodyさん2006/02/09(木) 23:28:12ID:???
>566
>565
0568nobodyさん2006/02/10(金) 00:21:11ID:???
わろわろはいすはいす
0569nobodyさん2006/02/10(金) 00:23:50ID:???
はいわろ
05705522006/02/10(金) 02:09:46ID:???
わかる人がいないようなので失礼しますね
0571nobodyさん2006/02/10(金) 02:17:10ID:???
my @tmp1 = ();
my %tmp2 = ('mode'=>'hoge','data'=>'test');
push @tmp1, \%tmp2;

↑と同じ事を1行でやろうとすには、どうしたら良いのでしょか?

my @tmp1 = (('mode'=>'hoge','data'=>'test'));

↑では、できませんでした…。
0572nobodyさん2006/02/10(金) 02:39:03ID:???
mixiのコードばら撒かれちゃったらしいけどどこかに残ってませんか?
0573nobodyさん2006/02/10(金) 02:44:06ID:???
home.plだけならある
0574ヽ(´ー`)ノ ◆.ogCuANUcE 2006/02/10(金) 03:17:56ID:???
>>571
my @tmp1 = ({'mode'=>'hoge','data'=>'test'});

リファレンスについて勉強しる。
0575nobodyさん2006/02/10(金) 04:19:33ID:???
>552=570
レスをちゃんと読んだか?
質問の投げ去りはやめろや
0576質問2006/02/10(金) 11:34:07ID:+Mjswkwe
2項分布の計算を行いたいのですが、
2項分布内のひとつの項を$k_posとする場合、

for($j=1;$j<10;$j++){
$k_pos=combi($g,$b)*(($bl_bun[$j]/65536)**$b)
*(((65536-$bl_bun[$j])/65536)**($g-$b));
}

というコードにすると、$gや$bが大きい場合、結果が出なくなってしまいます。
(combiというのは自作subです)
恐らく、掛け合わせる数が思いっきりでかい数と思いっきり小さい数を掛け合わせてるのが原因だと思います。
何か解決方法はありますでしょうか?よろしくお願いします。
0577nobodyさん2006/02/10(金) 14:05:43ID:???
use bignum;
は試してみた?
0578nobodyさん2006/02/10(金) 17:20:13ID:???
Content-Lengthに手こずっています。
これの値がいい加減だと読み込みが変になるみたいで、レスポンスが大幅に遅くなりました。
i-modeのためContent-Lengthは必須みたいで困ってます。

値を取るのは一般的な方法で全データを変数に入れてlengthで計ってるんですけど
うまくいかないです。
何が原因やら・・・文字コードはUTF8で統一していますが・・・
0579nobodyさん2006/02/10(金) 17:21:22ID:???
>>1
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
05805782006/02/10(金) 17:40:28ID:???
ギャハ。自己解決しました。
どうも。でへへ。
もしかしたら僕と同じミスをする人が出てくるかもしれないので原因を書いておきます。

えーと、lengthで計算する変数に"Content-type: text/html"を含めていたので
うまく計算できなかったみたいです。
この一文を外して、
print "Content-type: text/html\n";
print 'Content-Length: ', $length, "\n\n";
print $data;
としたら上手くいきました。
どうもスレ汚しすみません。
0581nobodyさん2006/02/10(金) 20:19:09ID:???
ズコー!
0582nobodyさん2006/02/10(金) 21:02:02ID:???
100%同じミスするようなのはいない
0583nobodyさん2006/02/10(金) 21:15:50ID:???
すまん、同じミスをしてた奴を見たことある。
0584nobodyさん2006/02/10(金) 21:48:34ID:???
ワラタ
0585nobodyさん2006/02/10(金) 21:59:59ID:???
ごめん、一度だけ同じミスやった
0586nobodyさん2006/02/10(金) 22:29:59ID:???
>>580
これを機にHTTPの仕様を勉強するといいかも寝
0587nobodyさん2006/02/11(土) 00:14:36ID:???
>586
おやすみうな
0588nobodyさん2006/02/11(土) 01:25:48ID:???
おやすみ
0589質問2006/02/11(土) 08:21:02ID:qlKqkAMK
use bignum
したいのですが、bignumはどこにあるのでしょうか?
0590nobodyさん2006/02/11(土) 09:05:06ID:???
print join("\n", @INC);
0591nobodyさん2006/02/11(土) 11:30:25ID:???
>>589
5.8以降なら標準なんだけど、また5.6とか?
0592ヽ(´ー`)ノ ◆.ogCuANUcE 2006/02/11(土) 13:32:23ID:???
perldoc -ml bignum
0593nobodyさん2006/02/11(土) 13:49:55ID:???
>>592
5.6.1 以下だと「only one of -t, -u, -m or -l ...」と叱られるな。
0594ヽ(´ー`)ノ ◆.ogCuANUcE 2006/02/11(土) 18:51:50ID:???
>>593
あ、なるほど。そうすると不完全だけど、perldoc -l かな。

ttp://blog.livedoor.jp/nipotan/archives/50146747.html
0595nobodyさん2006/02/12(日) 06:58:32ID:bHuVlhbg
perlで乱数を求める時にrand関数を使いますけど、
バージョンが5.0?(詳しくは失念しましたが)からは種となるsrandを使わなくても良くなりましたよね?

バージョンが5.8のサーバで昔作られたsrandが使用されているスクリプトを使っていたんですが、
先日新しいバージョンではsrandを使うとむしろ乱数の品質が下がると言う事を知りました。

元よりどうも乱数が偏っているなと感じていたんですが、
それはこのsrandの性と考えていいんでしょうか?
それとも単なる勘違い的なものでしょうか?

乱数の使い方はおみくじとかサイコロとかそういったもので、
何かのシミュレートとかの用途ではありません。

今までサイコロで言えば1が5回連続して出たけど、それは確かにたまにはあるし、
たまたま出た時が強く印象に残っただけだ、と思っていたんですが。

とりあえずsrandは外す方向で考えているのは当然なんですけど、
どうにも今まで起きてた事象のモヤモヤが引っかかって。
0596nobodyさん2006/02/12(日) 08:04:29ID:???
srandってのは、使う乱数表を決めるようなもの。
srand(1)なら1番の乱数表を使うというような。
乱数の質はシステム依存。

1万回サイコロを振った程度なら偏るものだけどね。
偏りがほしくないのなら、別の方法を考える。
0597nobodyさん2006/02/12(日) 09:33:07ID:???
> 1万回サイコロを振った程度なら偏るものだけどね。
> 偏りがほしくないのなら、別の方法を考える。

? 何を言っているのかわかってる?
0598nobodyさん2006/02/12(日) 09:56:51ID:???
ウホッ良い勘違い!
0599nobodyさん2006/02/12(日) 10:05:55ID:???
おみくじやさいころではどっち使っても人間が直接体験できるような偏りは出てきません。
ただの勘違い。

ただしまともな乱数使ってもプログラムの中で偏った分布をするような
プログラミングがされていたら当然偏るけどね。
06005962006/02/12(日) 10:07:07ID:???
>>597
それでは、確率と乱数とばらつきについて教示ください。
数学については、なにぶん素人なので。
06015962006/02/12(日) 10:10:06ID:???
サイコロ一万回程度ではばらつきが大きくて、偏りが出るということなんだけど。
0602nobodyさん2006/02/12(日) 11:07:16ID:???
質問です、
表示させるすべての桁でランダムで数字を表示するプログラムを改造して、アルファベットもランダムで表示させたいのですが、どう改造すればいいでしょうか?


ソースは、
# ランダム桁のランダム数字の生成
$max_num =1;
$min_num =1;
for( ; ; ){
$num_digit = rand($MAX_DIGIT)%$MAX_DIGIT+1;
last if($num_digit >= $MIN_DIGIT);
}
for($i=0; $i<$num_digit; $i++){ $max_num *= 10; }
$min_num = $max_num/10;
for( ; ; ){
$num = rand($max_num)%$max_num;
last if($num >= $min_num);
}

です。

0〜9まではこれで表示できるんですが、'a'〜'z'までを時間を種にして表示させたいんです。
0603nobodyさん2006/02/12(日) 13:32:27ID:???
@atoz = (a..z);
0604nobodyさん2006/02/12(日) 14:11:18ID:???
文字列の中から、「XXX号室」 の部分を抜き取ろうとしていますが、文字化けが起きて困っています。
XXX には半角アルファベット大文字か数字が入り、1桁から3桁程度です。
だいたいうまくいくのですが、「階」という漢字のあとにXXX号室が来ると化けてしまいます。

ソースコードは次の通りです。環境はWindows2000 ActivePerl5.8.7です。
my @a;
my @b;
push @a, "A4号室";#うまくいきます
push @a, "1FC5号室";#うまくいきます
push @a, "1階206号室";# K206号室 になってしまいます
push @a, "A棟207号室";#うまくいきます
foreach (@a){
push @b, "$&\n" if /[A-Z0-9]+号室/;
}
print @b;

「1階206号室」のときだけ「K206号室」になってしまいます。
何が原因で、どうすればよいのでしょうか。
どなたかご教授いただけると助かります。
0605nobodyさん2006/02/12(日) 14:38:27ID:???
>>604
「階」が Shift_JIS だと「8A 4B」なので二バイト目の「4B」が「K」にあたるのが原因だね。
/[A-Z0-9]+号室/s にすればいい。
06066052006/02/12(日) 14:39:03ID:???
ごめん、 Ruby と勘違いした。
Perl だとどうするんだろう?
0607nobodyさん2006/02/12(日) 14:44:47ID:???
/(?<![\x81-\xfc])[A-Z0-9]+号室/

てけとーな応急処置だけど、よかったらどうぞ。
0608nobodyさん2006/02/12(日) 14:46:18ID:???
シングルクオートと、quotemetaを試すがよろし。
0609nobodyさん2006/02/12(日) 14:50:41ID:???
>>608
すぐに気付くとは思うけど、今回のケースではそれじゃダメよん。
06106042006/02/12(日) 15:14:54ID:???
早速のレスありがとうございます。
原因は>>605さんのおっしゃるように、Shift_JISの2バイト目とマッチしてしまったからなのですね。
勉強になりました。
対処としては>>607でうまくいきました。ありがとうございました。

(?<![\x81-\xfc])の部分ですが、Shift_JISの2バイト目を取らないように、
「左側にShift_JISの1バイト目が存在しない位置」を指定しているという理解で合ってますか?
06116042006/02/12(日) 15:48:35ID:???
すみません、さっきの方法ではうまくいかない場合がありました。
>>604のコードには記述しませんでしたが、処理対象には●12号室 ■10号室 のようなパターンもあり、
これまでは上手くいってましたが、>>607では 2号室 0号室 と出力されてしまいます。
Shift_JISは使わないほうが良いのでしょうか・・・
0612nobodyさん2006/02/12(日) 15:59:29ID:???
そうだよ
0613nobodyさん2006/02/12(日) 16:57:35ID:???
んなら、ユニコードでも使ってみようか。

use Encode;

my $pattern = '([A-Z0-9]+号室)';
my $str = "1階206号室";
Encode::from_to($pattern, 'sjis', 'utf8');
Encode::from_to($str, 'sjis', 'utf8');
$str =~ /$pattern/;
my $match = $1;
Encode::from_to($match, 'utf8', 'sjis');
print $match;
06146072006/02/12(日) 18:51:15ID:???
ほんじゃぼくはアドホックに正規表現をいじる係ね。
あくまで >>613 の言うように utf8 で処理するのが王道なのは百も承知で。

push @b, "$1\n" if /(?:[\x81-\xfc].)*([A-Z0-9]+号室)/;
0615nobodyさん2006/02/12(日) 20:04:49ID:???
>600
乱数以外の偏らない別の方法って何?
ヒントだけでもいいから教えて

偏らないってどういう意味?
1万回やると「6」は1666回出るの?それとも1667回出るの?
0616 ◆TWARamEjuA 2006/02/12(日) 20:07:39ID:???
/[A-Z0-9]{1,3}号室/
0617nobodyさん2006/02/12(日) 20:09:39ID:???
/[A-Z0-9]{1,3}号室/i
または
/[A-Za-z0-9]{1,3}号室/
06186072006/02/12(日) 20:43:14ID:???
>>616-617
それだと、

>push @a, "1FC5号室";#うまくいきます

などで残念なことに。
0619nobodyさん2006/02/12(日) 23:28:00ID:ptODJMag
削除パスワード機能のついた掲示板を設置しているんですが
削除パスワードが“1111”や“1212”、“1122”みたいな単純なパスワードを弾くには
どうすればいいでしょうか?

if ($password = ~ /1111/){ $error = 'エラーです'};
if ($password = ~ /1212/){ $error = 'エラーです'};

みたいにいちいち指定するよりもスマートな方法を伝授してください


0620nobodyさん2006/02/12(日) 23:31:23ID:???
"単純"の定義が・・・
06216192006/02/12(日) 23:42:10ID:ptODJMag
削除パスワードは4桁の英数字にしてあるので
1111 などの連続
1212 1122 1222 などの2つの種類の文字のみ

のつもりです
06226042006/02/12(日) 23:54:16ID:???
>>613
うまくいきました。ありがとうございます。
調べて初めて知ったのですが、UTF8だと文字の途中のバイトでマッチしなくてすむようなので、
このやり方が適切みたいですね。

>>614
[\x81-\xfc]のあとのドットで2バイト目をマッチさせてるんですね。
ドットは任意の1文字としか考えてませんでしたので、途中の1バイトを1文字とみなして
マッチさせるとは思いもしませんでした。勉強になります。

>>616-617
そのやり方でも上記データを処理できますが、アルファベットは大文字固定で、
長さは3文字以上もありうるので[A-Z0-9]+になります。レスありがとうございました。
0623nobodyさん2006/02/12(日) 23:57:14ID:???
my %seen;
if (scalar (grep { !$seen{$_}++ } split //, $password) <= 2) {}

とかどうだろう。
06246192006/02/13(月) 00:18:53ID:NkDDMowL
>>623
どうもです

書き忘れましたけど最初↓
if ($password = ~ /(.)(\1|(.))(\1|\2)(\1|\2)/){ $error = 'エラーです'};

これだとなんかおかしいんです
どこがおかしいのか自分でも
0625nobodyさん2006/02/13(月) 01:06:45ID:???
3桁程度って言ってるからわざわざ3桁までにしたのにorz
0626nobodyさん2006/02/13(月) 01:07:12ID:bzAWjmTk
WindowsのApacheで自宅サーバを立てました(ActivePerl)

プログラム中に
print $env = $ENV{'QUERY_STRING'};
と文を書き
$envに「name=maruyama」が入ることを期待して

URLに
http://www.hogehoge.jp/cgi-bin/index.cgi?name=maruyama
を打ち込みましたが「Internal Server Error」となります。

この場合URLの「?」の後ろ(name=maruyama)をブラウザに表示させるにはどのようにしたらよいのでしょうか?
0627nobodyさん2006/02/13(月) 01:11:46ID:???
my($query) = $ENV{'QUERY_STRING'} || "";
print $query;
0628nobodyさん2006/02/13(月) 01:12:32ID:???
あっ、こんてんとたいぷ はちゃんと書いてね
0629nobodyさん2006/02/13(月) 01:14:48ID:???
HelloWorld!から初めて欲しいね。
06306192006/02/13(月) 01:23:47ID:NkDDMowL
>>624をお願いします

if ($password = ~ /(.)(\1|(.))(\1|\2)(\1|\2)/){ $error = 'エラーです'};
0631nobodyさん2006/02/13(月) 01:33:47ID:???
>630
最後の2文字を入れ替えてごらん

それと・・・
>629
0632nobodyさん2006/02/13(月) 01:37:18ID:bzAWjmTk
>>627
違うところが間違ってました。
お答えありがとうございました。

自己解決しました。
ご迷惑をおかけしました
06336192006/02/13(月) 01:38:58ID:NkDDMowL
>>631
if ($password = ~ /(.)(\1|(.))(\1|\2)(\1|\2)/){ $error = 'エラーです'};
でも
if ($password = ~ /(.)(\1|(.))(\1|\2)(\1|\2)/){ $error = 'エラーです';}
でも結果は同じでした


(.)(\1|(.))(\1|\2)(\1|\2) ←ここをどうすればいいんでしょうか?
0634nobodyさん2006/02/13(月) 02:17:57ID:???
>621

# 9文字以下はエラー
if(length($pass) < 9){ &error(); }
# 数字小文字大文字記号が混ざってないとエラー
if(!(($pass =~ /\d/) && ($pass =~ /[a-zA-Z]/) && ($pass =~ /[_!#$%&'()=\-"\[\]\|{}\/\.,\?]/))){ &error(); }
# 同じ文字が連続したらエラー
if($pass =~ /([0-9a-zA-Z])\1/g){ &error(); }
06356342006/02/13(月) 02:20:28ID:???
最後の行修正
$pass =~ /(.)\1/g
06366192006/02/13(月) 02:25:30ID:NkDDMowL
>>635
どうもです。

2種の文字で構成されるパスの場合のエラーの場合どうすればいいでしょうか?
0637nobodyさん2006/02/13(月) 02:28:03ID:???
お前ら釣られすぎ
0638nobodyさん2006/02/13(月) 02:49:38ID:???
>>623でいーんじゃないの?
0639nobodyさん2006/02/13(月) 02:54:32ID:???
>>625
それでも "1階23号室" が "K23号室" になっちゃってダメじゃね?
06406342006/02/13(月) 04:00:03ID:???
>636
ちったぁ考えろ
終了
06416192006/02/13(月) 04:12:30ID:???
>>640
正規表現の勉強し直せ
06426192006/02/13(月) 04:54:25ID:???
>>641
私も頑張るからさ
0643nobodyさん2006/02/13(月) 14:25:40ID:???
ある入門書には、
open(UNKO "kusai.txt");
@BENKI=<UNKO>;
みたいにopen()関数で開いたテキスト内容(別にテキストじゃなくても良いが)
を配列に代入してるけど、スカラーじゃ駄目なの?
スカラーだと変数が32bitしかないから、エラい人が個々の配列にに自動で文字列を
一文字づつ代入してくれるから?
06446432006/02/13(月) 14:26:52ID:???
ごめん、日本語になってない ○rz
脳内補正よろしく。
0645nobodyさん2006/02/13(月) 14:56:24ID:???
>>643
<>はスカラーコンテキストで使用すると一行読み込む。( $hoge = <FUGA> )
リストコンテキストで使用するとファイルをすべて読み込む。( @hoge = <FUGA> )
一気に配列に読み込む必要性が無ければ、
スカラーコンテキストで一行ずつ読み込んだ方が使うメモリーは少なくてすむので
私としてはそうすることをお勧めしたい。
しかし、一気に読み込むことでファイルをロックするべき時間が短くなるという利点もあり、
そういう風に一気に読み込むことを好む人もいる。前にこのスレで議論になったこともあった希ガス。

> 個々の配列にに自動で文字列を一文字づつ代入
配列の個々の要素に一文字一文字、ということ?一行ずつの文字列が入るよ。
$hoge[0] = "foo\n";
$hoge[1] = "bar\n";

> スカラーだと変数が32bitしかないから
Perlでは内部的に自動で整数型、不動小数点型、文字列型などを変換する。
ユーザ側は通常大きさを考えるようなことは無いし、この場合では文字列型になる。
0646nobodyさん2006/02/13(月) 18:09:49ID:???
>644
# メモリの許す限り全Read
@lines = <IN>;

# 改行まで
$line = <IN>;

メモリ使用量に関して645さんのを補完すると
foreach (<IN>){ 〜処理〜 }
じゃなくて
while (<IN>){ 〜処理〜 }
です。


・・・だよね? (;´∀`)
0647nobodyさん2006/02/13(月) 20:42:55ID:???
数字だけのを弾くとかすれば?どこらへんまで弾きたいのか分からないから何とも言えない
0648nobodyさん2006/02/13(月) 22:21:17ID:???
画面をFRAMEで縦に2分割してデータの読み書きのプログラム作ってます。
上のaaa.cgiはフォーム入力からデータをファイルに書き出すCGIです。
SUBMITで自分自身を呼び出して何回も書き込めるようにしています。
下のbbb.cgiはaaa.cgiで作ったファイルからデータを1件づつ読み込んでいます。
【疑問】aaa.cgiでSUBMITを押してもbbb.cgiが動かないので画面のデータが更新されない。
【希望】aaa.cgiで更新したデータをすぐに下のbbb.cgiを動かして画面を更新したい。
    bbb.cgiに更新ボタンを設置するのはやりたくない。

どうすればいいでしょうか?
0649nobodyさん2006/02/13(月) 22:38:17ID:???
チャット用のcgiをどっかから拾ってきて設置する。
0650nobodyさん2006/02/13(月) 22:43:31ID:???
> foreach (<IN>){ 〜処理〜 }
> while (<IN>){ 〜処理〜 }

この二つって何が違うのでつか?
0651nobodyさん2006/02/13(月) 22:51:19ID:???
リストを最初から最後まで繰り返す。
条件式が真の間繰り返す。
行入力演算子のときはwhile。
0652nobodyさん2006/02/13(月) 23:03:26ID:???
>648
そんなあなたには
つ【JavaScript】
0653nobodyさん2006/02/13(月) 23:11:16ID:???
aaa.cgiが更新されたのを認識したらparent.frames[1].以下略とかで更新
06546482006/02/13(月) 23:48:12ID:???
649さん、そういえばチャットと同じ構造でしたね。気がつきませんでした。
652さん、その手もありましたか。調べてみます。
653さん、キーワードありがとうございます。やってみます。

ヒントありがとうございました。<(_ _)>
0655nobodyさん2006/02/14(火) 00:32:58ID:INKxTjsz
print qq(<FORM method="POST" action="$CGINAME">\n);
print qq(<INPUT type="submit" value="push">\n);
print qq(<input type="hidden" name="mode" value="change">\n);
print qq(</FORM>\n);

これを実行する(WEBページでPUSHボタンを押す)と「ファイルのダウンロード」(ローカルに保存)となってしまい、CGIが実行しません。
CGIを実行させるにはどのようにしたらよいのでしょうか?
0656nobodyさん2006/02/14(火) 00:51:49ID:???
>>650
・foreachやforはリストを元にしたループも可能。リストコンテキスト。ループ前に全部読む。
・while(<FH>)はwhile(defined($_ = <FH>))の略記。スカラーコンテキスト。ループ1周で1行読む。

>>655
実際に実行されてる可能性もある。とりあえずそれをダウンロードして中身をチェック。
CGIのプログラム本体が落ちてきたのならサーバ側の設定の問題でPerlは関係ないだろう。
06576552006/02/14(火) 01:45:00ID:INKxTjsz
ありがとうございます、
Apacheの設定ですかねえ。
どこをどのように書き換えたらよいのかよくわからないです・・・。
0658nobodyさん2006/02/14(火) 01:51:15ID:???
Apacheの質問は自宅鯖板でどうぞ。
0659nobodyさん2006/02/14(火) 02:08:04ID:???
CGIでPOSTで受け取ったデータを使うとき、
read(STDIN, $str, $ENV{'CONTENT_LENGTH'});
は
$str = <STDIN>;
とどこが違うんですか?
0660nobodyさん2006/02/14(火) 02:26:53ID:???
俺も具体的なことわからなかったからググると2分でわかった
0661nobodyさん2006/02/14(火) 04:01:35ID:???
URL Encoded しかあつかわねぇ!ってなら差は無いけど Multipart を考慮するなら read を使う
06626432006/02/14(火) 13:54:25ID:???
みなさんどうもありがておう。
つまり便器に入ったウンコを一段ずつ取り出すには配列の個々にアクセスすれば良い訳ですね。
0663nobodyさん2006/02/14(火) 16:36:29ID:TPTf1Qt3
全角文字を含む入力データのチェックをしたいのですが、
(ひらがなのみとか、全角文字のみとか、半角英数のみとか)
何か情報がまとまってあるところないでしょうか?

というか、今ひらがなのみはなんとか以下のコードで動いたんですが

print "Content-type: text/html; charset=Shift_JIS\n\n";
$pattern = '(?:\x82[\x9F-\xF1])*';

$data =~ /$pattern/;
if ($& eq $data){
print "match";
}else{
print "unmatch";
}
exit;


なんかあやしいです。
回りくどいし
0664nobodyさん2006/02/14(火) 16:47:09ID:OAiNE+tI
1 :知りたいこと
cgiが”更新 ”ボタンで呼び出されたのかどうかが知りたい
2 : やってみたこと、
cgi-lib.plの &ReadParse(*form)でformの値を取得してみた。
3 : でも何も新しい値が入っていない

ごめんなさい、どうやって類似の記事を探したらいいのかわからなくて
せめてヒントをお願いします。m(_ _)m
0665nobodyさん2006/02/14(火) 17:17:27ID:???
よく使われるhogeって何?
0666nobodyさん2006/02/14(火) 17:31:14ID:???
>>665
サンプルコードなどで適当に変数名をつけるときに使う
英語ではfooやbarが使われるのでfoo,barについてはrfcにもなっている

ほげ学のサイトがあるので探してみ
0667nobodyさん2006/02/14(火) 18:13:45ID:???
>664
つ【アクセスログ】
0668nobodyさん2006/02/14(火) 18:19:24ID:???
>>664
本当にやりたいことは違ってたりしない?
二重投稿を防ぎたいとかそういうことだったりしない?
0669nobodyさん2006/02/14(火) 19:20:22ID:???
>>663
つ~ /\x81-\xff/
0670nobodyさん2006/02/14(火) 21:32:00ID:???
たまには頭使ってみようかな・・・
コントロールコードを拒否したければ
\x0-\x1f の範囲でオケなのかな?
0671nobodyさん2006/02/14(火) 22:37:15ID:mb5R1R6v
すいません質問させてください
Perlで作ったおみくじCGIをサイトに置いたんですが
わたしのサイトに来てくださる人の携帯(DoCoMo)では動作しないって言われました
それでわたしも携帯で動作を確認するとやっぱり動きませんでした
PCでは問題なく動作するのですが携帯向けには何かしなければならないのでしょうか?
>>8-で紹介されているサイト様も見てみたんですが書いてありません
詰まってしまいました
どなたか原因が分かりますでしょうか?
0672nobodyさん2006/02/14(火) 22:52:06ID:???
>>671
http://pc8.2ch.net/test/read.cgi/tech/1138519327/395
レスもらってるんだから、調べてからにして下さい。
動作しない、だけでは解決のしようがありません。
0673nobodyさん2006/02/14(火) 23:13:17ID:mb5R1R6v
>>672
すいません、そこにもないです

それからレスはhttp://pc8.2ch.net/test/read.cgi/tech/1138519327/395
で誘導されたので気づきませんでした
0674nobodyさん2006/02/14(火) 23:20:59ID:???
>673
誘導してもらってるのに、全然読んでないことだけは分かった。
シュミレータで確認汁。
それと、動かないだけじゃわかりません。
0675nobodyさん2006/02/15(水) 00:01:00ID:???
× シュミレート
○ シミュレート

ここもゆとりんぐ全開かwww
0676nobodyさん2006/02/15(水) 00:02:40ID:TfAwMHcm
>>674
名前を入力してもらいボタンを押すと運勢が出るという
おみくじCGIでPOSTメソッドです
携帯だとボタンが押せない状態なんです

0677nobodyさん2006/02/15(水) 00:06:18ID:???
シュミレート の検索結果 約 58,200 件中 1 - 10 件目 (0.24 秒)
企業でも普通に使ってるみたいw
0678nobodyさん2006/02/15(水) 00:13:03ID:???
企業が使ってるから正解ではない
ゆとりんぐは勉強してろ
0679nobodyさん2006/02/15(水) 00:15:54ID:???
>>678
何事も楽しめ
0680nobodyさん2006/02/15(水) 00:19:54ID:???
(´-`)。oO(…skk で /simulate で変換すればいいのに…)
0681nobodyさん2006/02/15(水) 01:05:24ID:???
1skk=3,7yenだそうだ
06826642006/02/15(水) 01:44:50ID:AsKZTDBd
>667 668サンクス。本当にやりたいことは

a.cgiのボタンを押す->入力されたデータにエラーが無いかチェック

0.エラー -> a.cgi でエラー表示
1.エラーがない ->a.cgiでBingo表示

0の状態でF5押しまくってると1の画面が表示されてしまいます。
a.cgiで結果を表示させるのが、そもそもの間違いなのでしょうか?
06836642006/02/15(水) 01:57:37ID:???
このスレに要点を書いてみたら普通におかしいな>682

入力されたデータにエラーが無いかチェック

に内在バグがきっとあるに違いない。という方向でちょっとダイブしてきまつ。
0684nobodyさん2006/02/15(水) 03:37:26ID:???
つ チラシの裏
0685nobodyさん2006/02/15(水) 07:26:25ID:???
>>676
そういうのは実際のソース見ないとわからんよ
Javascript使ってる可能性も考えられるしね
0686nobodyさん2006/02/15(水) 10:29:13ID:???
>>669
それって、二バイト文字の1btyle目のコードですよね。
組み込んでみます。

ちなみにこういうのって一覧表のあるサイトってありますか?
今は、IMEパッドで見てるんですが、なんか微妙に異なるようですので。
0687nobodyさん2006/02/15(水) 11:13:19ID:???
>>686
漏れはいつもここを薦めている。変換則も(Cが少々読めれば)わかるし
ttp://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/kanjicod.html

UTF-8についてはRFCを読んで調べたけど解説しているサイト無いかな…
0688nobodyさん2006/02/15(水) 15:21:01ID:PmYHM0Bw
次の文でFormの値を取り込んでいるのですが、この処理を行った場合その後の処理は無視される理由が分かりません。
分かる方がおりましたら教えてください。

subloadFormdata{
 my ($query, $pair);
 read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
 print $query;
 foreach $pair (split(/&/, $query)) {
  my($key, $value) = split(/=/, $pair);
  $value =~ tr/+/ /;
  $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
  $value = jcode::sjis($value);
  $value =~ s/&/&/g;
  $value =~ s/</</g;
  $value =~ s/>/>/g;
  $value =~ s/\x0D\x0A/<br>/g;
  $value =~ tr/\t/ /;
  $FORM{$key} = $value;
 }
}
-------------------------------------
たとえばメインルーチンで
print "ここは出力される";
loadFormdata();
print "ここは出力されない";
0689nobodyさん2006/02/15(水) 15:29:27ID:???
subloadFormdata || jcode::sjis 呼べない
0690nobodyさん2006/02/15(水) 16:11:29ID:RdFiluwL
>>685
ソースを見なきゃ分からんようなCONTENT_LENGTHのことだと
も気づかないアフォは発言すべきじゃないな。

>>686
~ /[\x81-\xff][\x40-\xff]/ ←これで全角全て拾える

0691nobodyさん2006/02/15(水) 16:42:00ID:???
>>690
DoCoMoはContent-lengthが必須なのは知ってるがボタンが押せないという表現が気になった
0692nobodyさん2006/02/15(水) 16:52:35ID:???
>691
だから、HTML見直せとiモードの解説サイト貼ってあるのにw
0693nobodyさん2006/02/15(水) 17:03:26ID:???
Content-Lengthは吐かなくても問題なく表示できる。
-1を吐いた場合ですら表示できる。
0694nobodyさん2006/02/15(水) 17:15:35ID:???
少なくとも Apache で CGI 経由なら、Content-Length ヘッダは
httpd が補完してくれるのでプログラム側で吐く必要は無い。
むしろ陽に吐いた方が、自動広告挿入などでサイズが変わる
場合に不具合の元となる。
0695nobodyさん2006/02/15(水) 17:50:41ID:???
>>693
表示は出来るが実行はできないだろ
0696nobodyさん2006/02/15(水) 18:27:23ID:???
>>694
> 少なくとも Apache で CGI 経由なら、Content-Length ヘッダはhttpd が補完してくれるので

ホント?
0697nobodyさん2006/02/15(水) 20:25:22ID:???
socketを使用してSSL通信を試みているのですが、下記のエラーで
はまってしまっております。

Bad Request
Hint: https://example.com:443/

ソースは下記で、HTTPでは正常接続の確認が取れました。
ご教示いただけますと幸いです。

use Socket;
my ($host, $filename, $data) = @_;
my $return_value;
my $port = 443;
my $iaddr = inet_aton("$host") or return 0;
my $sock_addr = pack_sockaddr_in($port,$iaddr);
socket(SOCKET,PF_INET,SOCK_STREAM,0) or return 0;
connect(SOCKET,$sock_addr) or return 0;
select(SOCKET);
$| = 1;
select(STDOUT);
my $len = length($data);
print SOCKET "POST /$filename HTTP/1.0\n";
print SOCKET "HOST: $host:$port\n";
print SOCKET "Content-Type: application/x-www-form-urlencoded\n";
print SOCKET "Content-length: $len\n\n";
print SOCKET "$data";
print SOCKET "\n";
while(<SOCKET>) {m/^\r\n$/ and last;}
while(<SOCKET>) {$return_value .= $_;}
close SOCKET;
return $return_value;
0698nobodyさん2006/02/15(水) 22:48:50ID:OyUmOolC
>>688
× subloadFormdata
○ sub loadFormdata
0699nobodyさん2006/02/15(水) 23:28:35ID:???
>>697
書き方はあってるみたいだけど、なんだろうね。
SocketがもしかしたらSSL通信に対応していないのかもしれない。
しかし確証はない
0700nobodyさん2006/02/15(水) 23:32:33ID:PmYHM0Bw
print $FORM{'hohehoge'};
とやるとフォームのデータが表示されるのですが、


$value = "hogehoge";
print $FORM{'$value'};

とやると何も表示されません。
hogehogeを変数にして、$FORM{'hohehoge'}と同じ内容のものが表示されるようにするにはどのようにしたらよいでしょうか
0701nobodyさんNGNG
× print $FORM{'$value'};
○ print $FORM{$value};
0702nobodyさん2006/02/15(水) 23:46:37ID:???
それか
print $FORM{"$value"};
だね。
07036972006/02/16(木) 00:29:46ID:???
>>699さん
ご返答有難うございます。
サーバを変えてみたのですが、やはり同じBad Requestが
返ってきてしまうというのが現状です。

もう少し頑張ってみます。
状況が変わり次第ご報告とさせていただきます。
07047002006/02/16(木) 00:43:41ID:P0dyMCan
あ、それでいけるんですね!
すいません。ハマってました^^;
ありがとうございました!
0705nobodyさん2006/02/16(木) 02:26:31ID:???
>>697
SocketでSSL通信やるなら自前で暗号化をやらなきゃならないが、そのコードはどこにあるのかね?
俺ならSocketでやるなんて大それたこと考えずに迷わずLWP。

>>699
わからないなら、それであってるとか、いい加減な回答しないで引っ込んでろよ。
0706nobodyさん2006/02/16(木) 12:37:14ID:ZVhjliSj
cgi-lib.plを使い
&ReadParse;
として、%inを多様しているスクリプトがあります。

これをCGI.pmへ変更したいのですが
$in{'name'}
 ↓
$q->param('name')
という変更をしないで$in{'name'}のまま使うには
どのような記述をすれば良いのでしょうか。

$incfnも利用しているので、こちらの対処方法もお願いします。
0707nobodyさん2006/02/16(木) 14:06:48ID:???
何で変更したいの?
cgi-libでいいじゃん。
君には十分だよ。
0708nobodyさん2006/02/16(木) 14:08:44ID:???
>>706
どこかにソースうpしてくれれば、対応してやるよ。
0709nobodyさん2006/02/16(木) 14:29:23ID:???
抽象的な質問で申し訳ないけど教えて欲しいっす。

言語切り替えが出来るように作ってあるページで、
フランス語なんかに言語を切り替えると文字化けして、その文字化けがタグを侵食したり
して表示が崩れたりします。フランス語やドイツ語を扱う時に注意する点ってどういうとこ
だか、誰かアドバイスもらえませんか?

ページは全部Perlで組んでます。
0710nobodyさん2006/02/16(木) 14:40:42ID:???
UTF-8人生で
0711nobodyさん2006/02/16(木) 19:00:13ID:???
index.html内で
<form action=aaa.cgi>
<input type=submit value=更新>
</form>
としているのですが、これだとボタンをクリックすると画面がaaa.cgiに移動してしまいます。
画面が一切変化しないでaaa.cgiを動かすにはどうすればよいでしょうか?
0712nobodyさん2006/02/16(木) 19:37:26ID:???
>>711
つ <form action="aaa.cgi" target="_blank">
0713nobodyさん2006/02/16(木) 20:02:38ID:???
>>711
Status: 204
07147112006/02/16(木) 20:32:43ID:???
レスありがとうございます。

>>712
別窓も開かない形にはできないでしょうか?
07157112006/02/16(木) 20:37:34ID:???
>>713

おぉ!できました!ありがとうございました。
0716nobodyさん2006/02/17(金) 00:28:06ID:???
>>706
perldoc CGIの「FETCHING THE PARAMETER LIST AS A HASH」という項目を読め。
07176762006/02/17(金) 00:50:26ID:LOkWB/9e
>>685
こんなソースです↓

if ($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN, $post, $ENV{'CONTENT_LENGTH'});
}else{ $post = $ENV{'QUERY_STRING'};}

for (split(/&/, $post)){
($word, $value) = m/^(\w+)=(.*)$/;
$value =~ s/\+/ /g;
$value =~ s/%([0-9A-F]{2})/pack('C', $1)/egi;
$q{$word} = $value;}

print <<EOS;
"Content-Type: text/html; charset=Shift_JIS"

<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>たいとる</title>
</head><body>
〜略

PCでは大丈夫ですが携帯では表示はしても反応なしです
どなたかフォローお願いします
0718nobodyさん2006/02/17(金) 00:52:34ID:???
>>717
print <<EOS;
"Content-Type: text/html; charset=Shift_JIS"

これおかしくね?
何でダブルクォートが・・

つか略すな。そこも大事だ。
07196762006/02/17(金) 01:29:23ID:LOkWB/9e
>>718
>>705の下段
0720nobodyさん2006/02/17(金) 01:37:53ID:???
>>719
お前がゆうな。
0721nobodyさん2006/02/17(金) 01:42:50ID:???
>>719
シネ
0722nobodyさん2006/02/17(金) 01:49:09ID:???
>>718
お前はそれだけの情報で足りると思ってんのか?
エスパーさん向けだな。

つか>>719で萎えた。
名前の欄はちゃんと確認しようねボクちゃん。
0723nobodyさん2006/02/17(金) 01:59:20ID:???
おみくじCGIとか小学生でもやらねーよwwwwwwww
0724nobodyさん2006/02/17(金) 03:03:07ID:???
今 >>723 がいいこと言った
0725nobodyさん2006/02/17(金) 03:33:08ID:???
<title>676と愉快な仲間達</title>
0726nobodyさん2006/02/17(金) 03:36:38ID:???
>>718-725
悔しいのは分かるがContent-lengthも知らない香具師はとりあえず黙ってろ




最近アレだな、厨房っぽいのが常駐してんだな
0727nobodyさん2006/02/17(金) 03:44:28ID:???
>>726=>>676さんですかそうですか。

テメーさんも黙ってれば?
0728nobodyさん2006/02/17(金) 03:55:29ID:???
<title>ゆかいなどうぶつ</title>
0729nobodyさん2006/02/17(金) 03:57:25ID:???
>>727
構ってもらえなかったのが相当寂しかったんだよ。生暖かく見守ってあげようよ。
0730nobodyさん2006/02/17(金) 04:05:10ID:???
<title>みんな、学生さんかな?</title>
0731nobodyさん2006/02/17(金) 04:22:14ID:???
さすがWebProg板
07327062006/02/17(金) 04:51:48ID:RcUmmaVq
>>716
ありがとうございます。

use CGI;
CGI::ReadParse();
とすることで、%inをそのまま利用でき、$incfnも$inへ変更してファイル名が無事に取得できました。
ただ、マルチパートの画像を取り出すことができません。
open (OUTFILE,">>/usr/local/web/users/feedback");
 while ($bytesread=read($filename,$buffer,1024)) {
  print OUTFILE $buffer;
 }
close $filename;
としても0byteとなってしまいます。
今まで調べて試行錯誤してみましたが、どうにもなりませんでした。
どなたかアドバイスを頂けないでしょうか。
0733nobodyさん2006/02/17(金) 04:56:57ID:???
html の <form> タグがある行を書いてごらん
07347062006/02/17(金) 04:58:30ID:RcUmmaVq
>>733
<form action="./***.cgi" method="POST" ENCTYPE="multipart/form-data">
としております。
0735nobodyさん2006/02/17(金) 06:13:19ID:???
input radioでデータを取りたいんですが何故かデータが転送されないんです。
0736nobodyさん2006/02/17(金) 09:20:24ID:???
そうですか。
次からは独り言はチラシの裏にでも書いてね。
0737nobodyさんNGNG
>>735
ラジオボタンを選択してないとか。
0738nobodyさん2006/02/17(金) 12:39:23ID:???
>>732
$filenameの内容をどこから取得してるか明かせ。
多分、問題はそこ。
0739nobodyさん2006/02/17(金) 13:07:05ID:???
>>732
どうでもいいが
close OUTFILE;
とやってファイルハンドルをクローズじゃまいか
0740nobodyさん2006/02/17(金) 17:48:02ID:???
>739
よく気が付いたなw

ちゃんと閉じられてなかっただけっていうオチかな?

でも最後にちゃんと閉じられなくてもスクリプトが終われば閉じられると思ったし、ん〜なんだろ
0741nobodyさん2006/02/17(金) 17:51:12ID:???
つか $filename がどういった経緯でセットされてるか分からんので特務レベルエスパーじゃないと(;´Д`)
0742nobodyさん2006/02/17(金) 17:55:00ID:???
>>741
でもまあ $filename っていう変数名からして十中八九 read() の使い方間違えてるんだろうね。
0743nobodyさん2006/02/17(金) 17:57:35ID:???
もしかして
read("d:\test.txt", $readduff, 1024);
みたいな使い方を想像してるのかな?
0744nobodyさん2006/02/17(金) 21:15:59ID:???
LWPを使用しhttps接続まで試みたのですが、httpsのみ接続がうまくいきません。
Crypt-SSLeay-0.51はインストール済みでございます。

ソースは下記です。
ご教示いただけますと幸いです。

sub post_request{
use LWP::UserAgent;

my ($req_url, $data) = @_;

my $ua = LWP::UserAgent->new;

my $req = HTTP::Request->new(POST => $req_url);
$req->content_type('application/x-www-form-urlencoded');
$req->content($data);

my $res = $ua->request($req);

if($res->is_success){
return $res->as_string;
}
else{
return "";
}
}
0745nobodyさん2006/02/17(金) 21:36:53ID:???
なんで SSLeayを使わない
0746nobodyさん2006/02/17(金) 22:33:50ID:???
$textの中から「title」という文字を検索したいのですが
$tmp = index( $text , 'title' );としました。
しかし、「title」だけではなく「TITLE」という文字の可能性もあり
そちらも同時に検索したいのですが、良い方法はありますか?
0747nobodyさん2006/02/17(金) 22:38:03ID:???
>>745
SSLeayはインストールさえしておけばLWPが自動的に
使用してくれると仕様書に書いてありましたが、認識に
相違がございますでしょうか。
0748nobodyさん2006/02/17(金) 22:43:44ID:???
>>746
正規表現こそがPerlの華。
$text =~ /title/i
だけどこれじゃ位置を知ることはできないから、使える用途はやや限られる。
多くの場合位置を知らなくても処理できるんだけどね。
本当にそれが現れる位置を知りたいなら、先に小文字に合わせてしまうという手がある
$tmp = index( lc $text , 'title' );
0749nobodyさん2006/02/17(金) 22:52:04ID:???
>>748
下の方法で上手く行きました。
ありがとうございます。
0750nobodyさん2006/02/18(土) 00:16:59ID:???
>>748
http://search.cpan.org/~nwclark/perl-5.8.8/pod/perlfunc.pod#pos_SCALAR__

$text = 'foo title bar tiTle, baz titlE foo Title, bar TITLE baz title';
print uc substr($text, pos($text) - 9, 4) while $text =~ /title/gi;
0751nobodyさん2006/02/18(土) 00:19:21ID:???
>>748
@-でわかるよ。

% perl -e '$text="aaaTitle"; $text =~ /title/i; print $-[0];'
3
0752nobodyさん2006/02/18(土) 00:25:35ID:???
>>750-751
そんな機能が……精進します
0753nobodyさん2006/02/18(土) 02:12:59ID:Hc0+hkLt
携帯だと実行できません
なので携帯でも実行できるように改造おねがいします

if ($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN, $post, $ENV{'CONTENT_LENGTH'});}
else{$post = $ENV{'QUERY_STRING'};}

for (split(/&/, $post)){
($word, $value) = m/^(\w+)=(.*)$/;
$value =~ s/\+/ /g;
$value =~ s/%([0-9A-F]{2})/pack('C', $1)/egi;
$q{$word} = $value;}

if ($q{'WORD'} ne ''){
for (split(/\r*\n+/, $q{'WORD'})){next unless /(.+)/;$word = $1;}
}

print <<EOS;
"Content-Type: text/html; charset=Shift_JIS"

<html><head>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>たいとる</title>
</head><body>
$word
<form method="POST">
<input type="SUBMIT" value=" テスト "><input type="text" name="WORD">
</form></body></html>
EOS
0754nobodyさん2006/02/18(土) 02:18:16ID:???
>>753
自分でやる気が無い人はスレ違い
http://pc8.2ch.net/test/read.cgi/php/1127916965/
0755nobodyさん2006/02/18(土) 02:20:21ID:???
>>753
おみくじCGIの方ですか

<form method="POST">

actionを指定しないと確かドコモじゃ実行できないんじゃなかったか。
つか普通に記述ミスだろ
0756nobodyさん2006/02/18(土) 02:56:52ID:Hc0+hkLt
>>755
記述忘れでした
ありがとうございました
0757nobodyさん2006/02/18(土) 05:25:34ID:???
まだおみくじやってんのか(;´Д`)
0758nobodyさん2006/02/18(土) 07:46:55ID:???
リスト1
1139355934
1139301779
1139325935
1139231627
1139409916
リスト2
1139231627
1139301779
1139355934
1139325935
のようにリスト1とリスト2があって、それぞれ$list1[連番]$list2[連番]のようになっています。
リスト1の上から順に読み込んで、読み込んだ内容がリスト2のどれかと一致したとき
$check[$list1の内容]を1にしたいと考えています。下のようにやってみましたがうまくいきませんでした。
どのようにしたら実現できるのでしょうか。ご教唆お願いします。
   $num=-1;
   until($list1dir_filenum==$num){
   $num++;
   print "$list1name[$num]\n";
      $list2num=-1;
      until($list2dir_filenum==$list2num){
      $list2num++;
      print "$list2name[$list2num]\n";
         if ($list1name[$num]eq$list2name[$list2num]){
         $val=$list1name[$num];
         $namecheck[$val]="1";
         }
      }
   }
0759nobodyさん2006/02/18(土) 08:16:20ID:???
>>758
一ついえることは
× 教唆
○ 教示
0760nobodyさん2006/02/18(土) 08:27:09ID:???
>>758
言ってる事とやってる事が違うような、、
07617582006/02/18(土) 08:29:29ID:???
>>759
すいません。goo辞書で確認してみたら自分が間違いでした。教示ですね。ありがとうございます。
で、質問のほうはどのようにしたらうまくいくのでしょうか。お願いします。
0762nobodyさん2006/02/18(土) 08:38:48ID:???
>>758
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#data__arrays

my @list1 = (0..9, 5..9);
my @list2 = (1, 5, 10, 10);
my %check;
{
  my(%saw1, %saw2, %count);
  # ++$count{$_} == 2 && ++$check{$_} for # 要素が多い時
  # %check = map ++$count{$_} == 2 ? ($_, 1) : (), # map で一気に
  %check = map +($_, 1), grep ++$count{$_} == 2, # 段階を踏んで
    grep(!$saw1{$_}++, @list1), # それぞれのリストが既に
    grep(!$saw2{$_}++, @list2), # ユニークなら必要無し
  ;
}
print map "$_\n", sort { $a <=> $b } keys %check;
0763nobodyさん2006/02/18(土) 08:39:26ID:???
確認してないけど、だいたいこんな感じかな?
for $i (0 .. $#list1){
$check[$i]= grep($list1[$i] eq $_, @list2);
}
0764nobodyさん2006/02/18(土) 08:42:47ID:???
>>758
> $check[$list1の内容]
早まるなっそんな馬鹿でかい数を配列の添え字に使ったら
すごい量のメモリが確保されるぞ
0765nobodyさん2006/02/18(土) 11:31:58ID:???
俺さあ、エルピーダの仕事してるんだよね。
世の中こういうヘボだらけになって、メモリをガンガン使って欲しい。
0766nobodyさん2006/02/18(土) 11:49:24ID:???
>>764
・・・・マジで?
0767nobodyさん2006/02/18(土) 12:34:04ID:???
もし1要素1バイトとしたら理論的には約1ギガだけど、実際にはどれぐらいになるんだろう??
0768nobodyさん2006/02/18(土) 12:58:01ID:???
入れる値によって可変するからLONGなら8GB
テキスト入れた日にゃ・・・Perl落ちw
0769nobodyさん2006/02/18(土) 13:01:05ID:???
ってか Stringであつかえばいいんちゃうの・・?
0770nobodyさん2006/02/18(土) 13:02:07ID:???
・・・・ ごめ! ハッシュかと思ってた! 配列かYO!!
0771nobodyさん2006/02/18(土) 13:09:37ID:???
実際にはそんな事にならないから。
嘘だと思うならやってみれ。
0772nobodyさん2006/02/18(土) 13:11:23ID:???
Out of memory っていわれるね
07737652006/02/18(土) 13:21:35ID:???
Out of memoryといわれたらデータ構造考え直さずに、64ビット化しろ。
頭使わず、メモリ使え。
0774nobodyさん2006/02/18(土) 13:35:07ID:???
>>773がなんていうか、かわいそうとうか…
0775nobodyさん2006/02/18(土) 16:14:55ID:???
数年前に通ったPerl教室じゃ
おみくじこそPerlの真こっちゅおって言ってたなぁ・・・
この前通りかかったら別の教室になってた
0776nobodyさん2006/02/18(土) 17:47:39ID:???
いいじゃん、randの使い方の勉強にはなるぜ
0777 ◆TWARamEjuA NGNG
お神籤は、また戻しちゃうからなぁ。。。
くじ引きみたいなのがよろしいかと@randの使い方?(って好きなように使えばいいけれども)
0778nobodyさん2006/02/19(日) 00:53:45ID:???
Larryはおみくじ引かせるためにPerlつくったんですかそーですか
0779nobodyさん2006/02/19(日) 01:32:35ID:xuHW0Wkn
一行目にカウンターを入れたいので、二行目からforeachでまわしたいのですけど、
どんな風に書いたらよいですか?

データファイル

4234                 ←一行目(カウンター)
さいたま市<>県庁<>アリーナ<>レッズ  ←二行目以降はループで
川越市<>時の鐘<>古都
秩父市<>祭り<>花の街



プログラム

open(FILE, "<hogehoge.dat");
eval{ flock(FILE, 1) };
@log = <FILE>;

一行目の読み込み
@logの一行目

二行目以降はこの処理
@logの二行目以降
0780nobodyさん2006/02/19(日) 01:47:56ID:???
>>779
カウンタと次からのデータは切っても切れないものなの?
違うファイルにしてもいい希ガス。
で、foreachじゃなくて、for (my $i = 1; $i ++; @log) {}
で、いい希ガス。
0781nobodyさん2006/02/19(日) 01:49:33ID:???
shiftしなさい。
0782nobodyさんNGNG
my($readline) = <FILE>;
$readline =~ s/\x0D\x0A|\x0D|\x0A/;
my($cnt) = int($readline);

while($readline = <FILE>){
  〜処理〜
}
0783nobodyさん2006/02/19(日) 01:50:09ID:???
>>779
配列に読み込んでforeachするのが良いかどうかは置いといて。
一行最初に読めば良いじゃん。

open(FILE, "<hogehoge.dat");
eval{ flock(FILE, 1) };
$counter = <FILE>;
@log = <FILE>;
0784nobodyさん2006/02/19(日) 02:08:39ID:???
>>778
え?知らなかったの?
0785nobodyさん2006/02/19(日) 14:03:52ID:???


┌→┐
↑話↓
└←┘

0786nobodyさん2006/02/19(日) 15:17:40ID:???
>785
しょうがねぇじゃん
過去ログ読まねぇんだもんorz
0787nobodyさん2006/02/19(日) 17:04:46ID:???
┌←┐  ┌→┐
↓  ↑  ↑  ↓
└→┘  └←┘
    ↑↑
───────
  低  気  圧
0788nobodyさん2006/02/19(日) 19:19:24ID:sHmg7IfX
質問させてもらいます
今Z-Z BOARDをレンタルしているのですが、こんど自前の掲示板を設置したいと思っています
どうしても利用者のトリップを引き継ぎたいのですが設置しようと考えている掲示板は
暗号化の部分がこのようになっています
sub tripmake{
my($key,$salt,$trip);
$_[0]=~s/◆/◇/g;
if($_[0]=~/#(.+)/){
$key=$1;
$salt=substr($key."H.",1,2);
$salt=~s/[^\.-z]/\./go;
$salt=~tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
$trip=substr(crypt($key,$salt),-10);
$_[0]=~s/#(.+)/◆<\/B>$trip/;
}
return $_[0];
}
Z-Z BOARDのトリップにすることは可能でしょうか?
皆様よろしくお願いいたします
0789nobodyさん2006/02/19(日) 19:33:27ID:???
>可能でしょうか?
可能です



終了、次の質問どうぞ
0790nobodyさん2006/02/19(日) 20:25:14ID:???
文字コードで困っています。
LWPのgetメソッドでページの情報を取ってきたのですが
その取ってきたページで使われている文字コードが何であるかを
知る方法は無いでしょうか?
0791nobodyさん2006/02/19(日) 20:40:05ID:???
jcode.pl の getcode
0792nobodyさん2006/02/19(日) 21:41:24ID:???
Jcode.pm の getcode
0793nobodyさん2006/02/19(日) 22:05:53ID:???
Encode::Guess
0794nobodyさん2006/02/19(日) 22:34:29ID:???
utf-8のために、Encodeのがいいかもね。
0795nobodyさん2006/02/19(日) 22:52:30ID:???
NKF の・・・、無理か・・・
07967882006/02/19(日) 22:58:25ID:???
数値をどのようにしたら実現できるのでしょうか。ご教唆お願いします。
0797nobodyさん2006/02/19(日) 23:03:51ID:???
もしかしてトリップ盗聴
0798nobodyさん2006/02/20(月) 00:26:00ID:ppD/ecqF
m/$x/;
とかしたときに、$xのなかにある正規表現の特殊文字を普通の文字として扱う場合はどうしたらいいですか
0799 ◆TWARamEjuA NGNG
quotemeta $x しておくとか /\G$x\E/ しちゃうとか。
0800nobodyさん2006/02/20(月) 00:46:50ID:???
>>799
thanks.
0801nobodyさん2006/02/20(月) 08:03:48ID:???
文字コードに答えて頂いた方、ありがとうございました
jcodeのgetcodeを使いました。>>793も調べてみようと思います。
0802nobodyさん2006/02/20(月) 10:55:25ID:???
>>801
>>794
0803nobodyさん2006/02/20(月) 15:30:11ID:???
>>799
\Q$x\E じゃねーの?
08048012006/02/21(火) 02:29:14ID:???
>>801です。
jcodeを利用したのですが、まだ文字化けが起こります。

$ua = LWP::UserAgent->new();
$res = $ua->get( $inurl );
if($res->is_success)
{
   $title = $res->title;
   &jcode::convert( $title , "euc", "", "z");
}
else
{
  #異常終了処理
}

ページ取得、タイトル取得には成功しているのですが。
jcodeの使い方は合ってますか?
私の使い方が正しくないのでしょうか?
jcodeでは希望の処理はできないのでしょうか?
Encodeを使えば回避できますか?
0805nobodyさん2006/02/21(火) 02:54:00ID:???
取得のページがutf-8とかじゃ?
0806nobodyさん2006/02/21(火) 03:14:58ID:???
>>804
渡すのは型グロブかリファレンス
&jcode::convert( \$title , "euc", "", "z");
0807nobodyさん2006/02/21(火) 17:43:45ID:???
ヒアドキュメントで書かれたものなら、変数に収めてlengthできるんですけど、
普通のプリント文をlengthするにはどうしたらいいんでしょうか?

sub hoge{
  print 'momoko';
  return;
}

この、サブルーチンhogeで出力される'momoko'の長さ(6文字)を計りたいのです。

$a = length(&unko);
print $a;

だとうまくいきせん。どうやればいいんでしょうか。
0808nobodyさん2006/02/21(火) 17:50:42ID:???
>>807
&unko がどこから出てきたのかわからないけど
サブルーチンの戻り値にセットすればどう
0809nobodyさん2006/02/21(火) 17:51:46ID:???
>>807
どうしてもprintを使いたいならIO::ScalarなりIO::Stringなり、
さらに必要ならIO::Teeなりを使う必要がある。
08108072006/02/21(火) 17:54:07ID:???
unkoじゃなくてhogeでした。
>>808
戻り値にセットしてもうまくいきません・・・
0811nobodyさん2006/02/21(火) 18:56:43ID:???
>>810
釣れますか?
0812nobodyさん2006/02/21(火) 23:48:30ID:???
>>806
できました。ありがとう。
0813nobodyさん2006/02/22(水) 05:44:07ID:???
おはようございます。
サイトに来てくれた人のHTTP_REFERERを保存していて
どんな単語で検索して来たのかを表示しようと思ったんですけど
うまく表示されない場合があります。

$value =~ tr/+/ / ;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("H2", $1)/eg ;
jcode::convert( *value, 'euc' );

調べたんですけど、だいたいどこもこのくらいしか書いてないんです。
他に何か必要なことがあるんでしょうか?
0814nobodyさん2006/02/22(水) 06:10:09ID:???
GoogleなんかはUTF-8だからJcode.pmとか使え
0815nobodyさん2006/02/22(水) 07:48:55ID:???
おぉ!化けなくなりました。
ありがとうございましたmm()__
0816nobodyさん2006/02/22(水) 15:01:17ID:???
ゲットの方法でポストすることって出来ますか?
詳しく言うとボタンをつかわいで変数にデータを入れる方法とかなんですが・・・
その場合後ろのタイトルとかに?をつけてポストとか書けばいいんでしょうか?
なんとかしてボタンじゃなくてリンクだけで送信されるようにしたいのですが。
宜しくお願いします。
0817nobodyさん2006/02/22(水) 15:12:46ID:???
複数の呼び出し元からアクセスできて、呼び出し元の環境変数を参照して、
それぞれ対応したページを生成する掲示板を作っています。
その掲示板に’ホームへ戻る’のリンクをつけて、その呼び出した元のページへ帰るようにしたいのですが、
どのような方法があるでしょうか?
最初はリファラーをクッキーに保存しておけばいいかなと思ったんですが、
imodeはクッキー使えないみたいなので困っています。
他の方法があれば教えてください。
0818nobodyさん2006/02/22(水) 15:21:39ID:???
>816
クリック保証型の詐欺ですか (; ̄^ ̄)
0819nobodyさん2006/02/22(水) 15:23:17ID:???
>818
面倒くさいだろうけど、<input type="hidden"〜 を使うしかないんじゃないかな
0820nobodyさん2006/02/22(水) 17:49:13ID:???
ハッシュのハッシュの配列の値を取る記述がうまくいきません。
'KKK'をプリントしたいんですが・・・
どうやればいいんでしょうか。

$a = {
  1 => 'aaa',
  2 => 'bbb',
  3 => 'ccc',
  4 => $b->{test}[0]
};

$b = {
  test => ['kkk','yyy']
};

print $a->{4};   # KKKをプリントしたいけどうまくいかないorz
0821nobodyさん2006/02/22(水) 18:13:58ID:???
$bを$aより先に定義。
それと$a,$bはsortで使う特殊変数だから、テストでも使わないのが吉。

08228202006/02/22(水) 18:36:33ID:???
>>821
順番の問題でしたか。トホホ・・・
サンクスです。
0823nobodyさん2006/02/22(水) 18:40:23ID:???
レンタルサーバを使用しています。
Jcodeを使用しようと思い
Jcode一式をドキュメントルートのlibフォルダ下へコピーしました。
続いて、test.cgiに
use lib './lib';
use Jcode;
と記述しました。ですが、エラーになります。
ttp://www.aglabo.com/agl/proevo/perl/install/jcode-user.html
ここを見るとこれだけで使えるようなのですが
何が悪いのでしょうか。
0824nobodyさん2006/02/22(水) 19:00:54ID:???
>>823
エラーメッセージをコピペしないところが悪いんじゃないかなと思った

最近はEncodeもJcodeも入ってる貸し鯖が増えてると思ってたんだけど
そうでもないのかな?
0825nobodyさん2006/02/22(水) 19:13:05ID:???
みんなEncodeって使ってる?
utfフラグとかめんどくさくて結局Jcode使ってる。
0826nobodyさん2006/02/22(水) 19:34:27ID:???
>>824
すいません。
エラーは 500 Internal Server Error です。
use Jcodeをevalでくくってもだめでした。
0827nobodyさん2006/02/22(水) 19:37:27ID:???
>>826
うう。そっちじゃなくて、

use CGI::Carp qw(fatalsToBrowser);

を仕込んでおいたら吐いてくれそうなほうのエラーメッセージ。
0828nobodyさん2006/02/22(水) 20:13:43ID:???
うう、すいません。
CGI::Carp使ってみました。
でも500エラーのままかわりません。
use Jcode;をコメントにするとエラーはなくなります。

use Jcode or die("asdf");は無理なんでしょうか?
0829nobodyさん2006/02/22(水) 20:14:51ID:???
>>825
Encodeのある今、Jcodeなんてキモくて使えない。
utfフラグが面倒だったら常にfrom_to使えばいい。
0830nobodyさん2006/02/22(水) 20:22:10ID:???
〜が?になる問題は解決したのか?
0831nobodyさん2006/02/22(水) 20:43:49ID:???
>>830
それは Encode じゃなくて >>830 の側の問題だろ。
0832nobodyさん2006/02/22(水) 21:00:05ID:???
>>831
どう解決するの?
ググり方がよくわからん
答え教えて
0833nobodyさん2006/02/22(水) 21:20:26ID:???
問題の起こるコードを見せれ。
0834nobodyさん2006/02/22(水) 21:37:54ID:???
use lib してないに一票
0835nobodyさんNGNG
>>828
evalして$@でキャッチしろ
0836nobodyさん2006/02/22(水) 22:47:51ID:???
>>823
use lib 'ドキュメントルート/lib;
ってすればいいんじゃないの?
0837nobodyさん2006/02/23(木) 00:36:17ID:???
>>835
山田家の逆襲を参考にファイルごとevalしてみたらこんなのが出ました。

Can't locate auto/Jcode/Unicode/utf8_euc.al in @INC
( (@INC contains:
./lib
/usr/lib/perl5/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/5.8.0
/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.0
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.0
/usr/lib/perl5/vendor_perl .) at lib/Jcode/Unicode.pm line 64

このline64ってのはコメント除いた行数なんですかね?

>>836
やったけどだめだったんです。
0838nobodyさん2006/02/23(木) 01:12:06ID:???
そりゃ間違った文法だもん
動いたら、それのほうが問題
0839nobodyさん2006/02/23(木) 06:14:00ID:???
eval しろというのは、以下のようにすることをいいまつ。

eval {
require Encode;
};
if ($@) {
print $@;
}

eval 使う時って、use でなくて、require しないと止まるんやね。
あと、eval ブロックは、; セミコロン付けないといけないので、きをつけるべし。
0840nobodyさん2006/02/23(木) 07:29:23ID:???
eval("use Omaemona");
print $@;
…じゃダメなの?

拙い自分用に拙く作ってみました。% hoge.pl Net::SMTP したりして遊ぶ。

#!/usr/local/bin/perl -w

use strict;

if (!$ARGV[0]) {
  die("まじめにトラップする気がない。\n");
}

eval("use $ARGV[0]");

if ($@) {
  print $@, "\n↑読め。\n";
} else {
  print "$ARGV[0]が使える気配。\n";
}
0841 ◆TWARamEjuA NGNG
(´-`).。oO(perl -e 'use Hoge' で十分な気がする。。。)
0842nobodyさんNGNG
>>841
そんな事言ったら perl -MHoge で十分
0843nobodyさん2006/02/23(木) 11:25:13ID:???
お世話になります。
eval("use Jcode");
ではエラなしの様子です。
eval{ Jcode::convert($hoge,"utf8","euc-jp"); };
だと>>837と同じエラがでます。
間違えて
eval{"use Jcode"};
としたときは
Undefined subroutine &Jcode::convert called
とでました。
0844nobodyさん2006/02/23(木) 11:33:40ID:???
perl -e 'eval("use unko");'
これだけ実行すると何もエラー吐かないわけだけど。
0845nobodyさん2006/02/23(木) 12:06:11ID:???
evalしたなら$@で補足しないと意味ないだろ。
perl -e "eval('use unko'); print $@"
0846nobodyさん2006/02/23(木) 12:08:49ID:???
ttp://www.ellinikonblue.com/blosxom/UNIX/20050816Jcode_pm.html
ここみて同じ今年たら解決しました。
お世話になりました。
evalの件は勉強になりました。ありがとうございました。
0847nobodyさん2006/02/23(木) 16:06:00ID:???
>>845
それで、藻前が書いた unko は本当に拾えるんか?
0848nobodyさん2006/02/23(木) 20:01:33ID:???
例に下ネタがある時点で答える気0
0849nobodyさん2006/02/23(木) 23:51:28ID:???
「埼玉県蕨市ヘロ」というバイナリ文字が入力されたらしく、
SQL発行(insert)時に止まってエラーになったみたいなの
ですが、この現象を回避する方法をご教示いただけますと
幸いです。

DBはPgモジュールを使用し、Postgresで管理しております。

たしかにコマンド直打ちでSQLを実行してみると、ターミナルが
停止してしまいます。。
0850nobodyさん2006/02/23(木) 23:52:30ID:???
MySQL で UTF-8 を使うようにして解決。
0851nobodyさん2006/02/23(木) 23:53:17ID:???
>>849
漢字コードとかも書きましょう。DBのテーブル側も。
0852nobodyさん2006/02/23(木) 23:56:18ID:???
CDBI とか DBIC とか使うとどうだろう。
ちゃんとエスケープしてくれるんじゃないかな。
0853nobodyさん2006/02/23(木) 23:57:35ID:???
すみません。
肝心のバイナリが貼り付けられませんでした。

「蕨市」と「ヘロ」の間には、エディタで開いて「SV」という
反転文字が入っております。
コードはSJIS→EUCに変換したものです。
0854nobodyさん2006/02/23(木) 23:58:36ID:???
> 「埼玉県蕨市ヘロ」というバイナリ文字が入力されたらしく、

元の文字列って何だろう?
そういうことも示せないってのは馬鹿かなにか?
08558492006/02/24(金) 00:22:49ID:???
皆様の早急なご返答、誠に感謝しております。
本当にありがたいです。。

もう少し具体的に説明させていただきますと、フォームはSJIS
ですので、入力があった文字はプログラムの先頭でEUCに
変換されます。

それをSQLにいれてinsertするのですが、その際に

「蕨市 〒ヘロ1-5-15」
    ↑
血管が浮き出るようなマーク

このような文字列でSQLが止まってしまっていることが発覚し、
改修していたのですが、どうしてもこのバイナリを処理すること
ができず困り果て質問させていただきました。

バイナリ文字は秀丸エディタで開くと、「SV」という反転文字が
入っております。

説明不足で申し訳ありません。
0856nobodyさん2006/02/24(金) 00:26:33ID:???
それで、何で藻前の仕事を漏れ等がしないといかんのかと。バカじゃねーの?
08578492006/02/24(金) 00:34:50ID:???
>>856
おっしゃるとおりです。
スレ汚しすみませんでした。
0858nobodyさん2006/02/24(金) 00:35:24ID:???
>>857
ということにしたいのですね?
0859nobodyさん2006/02/24(金) 00:35:54ID:???
一件落着

はい次
0860nobodyさん2006/02/24(金) 00:38:18ID:???
この展開ヒドス。
08618492006/02/24(金) 00:38:43ID:???
>>858-859
はい。
ずらずらと書いてしまい申し訳ありませんでした。
0862nobodyさん2006/02/24(金) 01:17:56ID:???
なんだかかわいそうにも見えるな

849が自殺していないことを祈る
0863nobodyさん2006/02/24(金) 01:37:32ID:???
この程度で自殺なんかしたら笑い話だなw
0864nobodyさん2006/02/24(金) 01:59:07ID:???
元の文字列と、変換後のバイナリデータのヘキサダンプ、
何を使って変換したのか(できればモジュールのバージョンも)が分かれば、
原因も分かるかもね。
0865nobodyさん2006/02/24(金) 05:23:53ID:???
簡単なcgi(UAがこれならこれ、こっちならこれを表示、というもの)を書いて、ローカルでテストしてokだったので、サーバーにアップしてみたのですが、
500エラー(文法エラーですよね?)になりました。

チェッカなどにかけてみると、

In string, @808 now must be written as \@808 at index.cgi line 70, near "@808"
index.cgi had compilation errors.

と、出たのですが、意味が分からなくて、ググってみたんですが当該情報が見つかりませんでした。
何が問題か、分かる方いましたら、お教えくださいますようお願いします。
0866nobodyさん2006/02/24(金) 05:38:14ID:???
>>865
@808 => \@808
0867nobodyさん2006/02/24(金) 05:44:22ID:???
>>865
sjisで全角スペースの下位バイトが0x40で"@"だから" 808"ってリテラルがどっかにあるのかも
0868nobodyさん2006/02/24(金) 05:45:48ID:???
>>866
有難う御座います
808なんて記述してないと思い込んで、確認してなかったですが、
(ファイルサイズ 808KB)
ってのがあってそこに\つけたら直りました

ほんと助かりました
0869nobodyさん2006/02/24(金) 05:55:06ID:???
全角スペースと8でダメなんだ。
0870nobodyさん2006/02/24(金) 08:17:49ID:???
全角の2バイト目が @ じゃなかったっけ?
0871nobodyさん2006/02/24(金) 10:45:19ID:???
UTF-8 使っとけばおk
0872nobodyさん2006/02/24(金) 10:59:30ID:???
もういい加減shift_jis関連の質問秋田
0873nobodyさん2006/02/24(金) 12:35:39ID:???
テンプレつーか診断フローチャートみたいのがあると良い気がする。

1. 日本語文字列を使っている: YES => 2, NO => 30
2. Shift_JIS を使っている: YES => 10, NO => 3
3. EUC-JP を使っている: YES => 5, NO => 4
4. UTF-8 ...

みたいな。
0874nobodyさん2006/02/24(金) 12:37:35ID:???
まあ、いいだしっぺが勝手にやってくれればよろしい。
使いやすければ使うし、そうでなければ無駄働きw
0875nobodyさん2006/02/24(金) 13:17:52ID:???
そうね。よさそうなら手伝うから873はたたき台よろしく。
0876nobodyさん2006/02/24(金) 13:49:15ID:???
多分やらないから、何度も同じ質問に答えればよろしいw
0877nobodyさん2006/02/24(金) 13:51:23ID:???
質問に答えず罵倒するということも可能。
0878nobodyさん2006/02/24(金) 13:55:04ID:???
テンプレ(できれば1)に
Shift_JIS のスクリプトにはお答えできません
0879nobodyさん2006/02/24(金) 15:59:44ID:hXh5LOuq
ググっても見つけられませんでしたので、
こちらで質問させて頂きます。

サーバのローカル上にある画像ファイルのMIMEタイプを
判別したいのですが、どうすればよろしいでしょうか?
GIFとJPEGが区別できるだけでいいです。
できることならモジュールとか使わず、
今のスクリプト上にシンプルに書きたいのですが。

08808792006/02/24(金) 16:03:26ID:hXh5LOuq
↑
画像のMIMEタイプって変ですね…。
画像のフォーマットの種類を判別したいのです。
よろしくお願い致します。
0881nobodyさん2006/02/24(金) 16:22:19ID:???
バイナリオープンしてヘッダを調べる
0882nobodyさん2006/02/24(金) 16:24:24ID:???
sub get_type{
  $file = $_[0];
  open (FILE, "$file");
  read (FILE, $data, 4);
  close (FILE);
  ($type) = unpack ("H4", $data);
  if ($type eq "ffd8") {
    $type = "jpg";
  } elsif ($type eq "8950") {
    $type = "png";
  } elsif ($type eq "424d") {
    $type = "bmp";
  } elsif ($type eq "4749") {
    $type = "gif";
  } else {
    $type = "知るかボケ";
  }
  return ($type);
}
0883nobodyさん2006/02/24(金) 16:45:12ID:???
ここって、口は悪いが何気にいい奴多いよなw
口悪くて性格も悪いやつもかなり混じってるけど。
08848792006/02/24(金) 16:53:33ID:hXh5LOuq
>>881,>>882
どうもありがとうございます。
画像なんて普段扱わないから、さっぱり?でした。

>>883
ほんとですねw
0885nobodyさん2006/02/24(金) 17:38:26ID:???
>882
特に問題は発生しないだろうけど、Win も考えるなら read の前に binmode を
0886nobodyさん2006/02/25(土) 01:58:25ID:qE7CF1Aw
どなたかお知恵をお貸しください。
外部ファイル呼び出しについて質問なのですが、呼び出し時に関数を
与えて呼び出す事は可能なのでしょうか?
ニュアンスとしましてはmain.cgiというソースの中に外部ファイル
(gaibu.cgi)を呼ぶ時にgetデータの送り方のように
require("gaibu.cgi?data=1");
としてgaibu.cgiへdata=1という関数を引き渡したいのですが・・・
main.cgiから渡されたdata=1というのをチェックして、gaibu.cgiの方で
main.cgiへ引き渡す関数を指定したいのですが。
妙な文章で申し訳ありませんが、どなたか宜しくお願い致します。
0887nobodyさん2006/02/25(土) 02:23:48ID:???
use 使えば?
0888nobodyさん2006/02/25(土) 02:28:14ID:???
エスパー待ちだなこりゃ
0889nobodyさん2006/02/25(土) 02:39:53ID:???
>>886
requireしてあんたが使う関数に、引数を渡してやれば良い。
0890nobodyさん2006/02/25(土) 02:48:36ID:???
最後の3行が名探偵も解けなさそう
0891nobodyさん2006/02/25(土) 02:54:14ID:???
「関数」と「引数」を混同している?
0892nobodyさん2006/02/25(土) 02:56:47ID:???
引数に戻り値のある関数を指定するって意味だろ
0893nobodyさん2006/02/25(土) 02:58:46ID:???
エスパーへの道程は長そうですが、

$ENV{"REQUEST_METHOD"} = "GET";
$ENV{"QUERY_STRING"} = "data=1";
my $data = `gaibu.cgi`;
0894nobodyさん2006/02/25(土) 05:08:43ID:???
>>886
そのスクリプトは、不特定多数がアクセスするような鯖に置くのかな?
0895nobodyさん2006/02/25(土) 05:10:53ID:???
>>893
> my $data = `gaibu.cgi`;

はつみみです。
0896nobodyさん2006/02/25(土) 11:37:16ID:JV6sbN7w
CSVファイル(最終行にだけ必ず特定の文字列XXXが含まれている)
を読み込んで、その最終行だけを行ごと削除して出力したいのですが
ググっていろいろ調べて試したんですがうまくいきません。
よろしくお願い致します。
0897nobodyさん2006/02/25(土) 13:21:09ID:???
>>896
(1) CSVファイルを一行ずつ読み込む
(2) 行がXXXでなければprint
(3) 終了
0898nobodyさん2006/02/25(土) 13:50:14ID:???
暇だから釣られてみた
ロックとかエラー処理は自分で付け加えてね
open(IN, "inputfile.csv");open(OUT, ">outputfile.csv");while(my $inline = <IN>){if($inline =~ /XXX/){print OUT $inline;}}close(IN);close(OUT);
… どこのセルにXXXが含まれてるか分からんからこれ以上は無理
0899nobodyさん2006/02/25(土) 13:51:44ID:???
軽く間違えたw
if(!($inline =~ /XXX/)){〜
0900nobodyさん2006/02/25(土) 14:08:44ID:???
!~ 使えよ。
0901nobodyさん2006/02/25(土) 15:47:11ID:???
初心者の初心者による初心者のための質問スレ
0902nobodyさん2006/02/25(土) 16:01:54ID:???
初心者の初心者による初心者のための底辺質問スレ
0903nobodyさん2006/02/25(土) 18:07:52ID:???
という訳で、上級者の>>901様と>>902様がツッコミどころの無い完璧なレスをしてくれます。
0904nobodyさん2006/02/25(土) 18:21:00ID:???
> という訳で、上級者の>>901様と>>902様がツッコミどころの無い完璧なレスをしてくれます。

>>901 と >>902 が上級者である根拠は?
0905nobodyさん2006/02/25(土) 18:22:11ID:???
臭いでわかる
0906nobodyさん2006/02/25(土) 18:26:41ID:???
汚物は消毒(ry
0907nobodyさん2006/02/25(土) 18:26:45ID:???
臭いでわかるための方法をきぼん。
0908nobodyさん2006/02/25(土) 18:27:58ID:???
汚物を消毒したからといって、汚物のままなのでは?
0909nobodyさん2006/02/25(土) 21:51:05ID:???
消毒しても癒されない。
0910nobodyさん2006/02/25(土) 22:35:17ID:???
質問があります。
今Perlの勉強の為に掲示板を作ってるんですが、
例えば十バイト毎に段落を変えたい場合どうすれば良いのでしょうか?
なにとぞご教授下さい。
0911nobodyさん2006/02/25(土) 22:37:34ID:???
substr
0912nobodyさん2006/02/25(土) 22:40:48ID:???
>>910
It's 書き込みテスト

お前、これを10バイトで段落変えてみろ
0913nobodyさん2006/02/26(日) 00:33:33ID:???
S-JISなのかEUCなのかUTF-8なのかUTF-16なのかで(ry
0914nobodyさん2006/02/26(日) 00:39:08ID:???
>>910
1) 10バイトを別の文字列にコピー
2) その文字列を正規表現などで、正しい文字列かチェック
3) 正しくなければ、1バイト減らしてコピーして2)へ戻る
4) 正しければ終了
0915nobodyさん2006/02/26(日) 02:24:54ID:???
UCSだったr(ry
0916nobodyさん2006/02/26(日) 14:45:09ID:???
(ry
0917nobodyさん2006/02/26(日) 16:03:42ID:QDNmTDhH
すいません。perl初めてまだ数日の者ですので馬鹿みたいな質問
ですが宜しくお願い致します。

Q.関数の値を代入する際、サイズの制限はあるのでしょうか?
例えば私が考えているので
$test = "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">・・・";
などのように関数にそのままHTMLソースを入れているのですが結構なサイズ
になってしまうので不安です。
0918nobodyさん2006/02/26(日) 16:05:28ID:???
> すいません。perl初めてまだ数日の者ですので馬鹿みたいな質問
> ですが宜しくお願い致します。

ということにしたいのですね。:)

ちなみにどう「初め」たのか教えてください。
0919nobodyさん2006/02/26(日) 17:06:28ID:???
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

もちろんどこまで「結構なサイズ」が変数に代入できるかを試した上での質問だよな?
0920nobodyさん2006/02/26(日) 17:11:02ID:???
どうでもいいけど共有鯖でテストするなよ
自鯖でテストしろよ
0921nobodyさん2006/02/26(日) 17:24:37ID:???
>>917
多分、メモリが許す限り。
使用メモリに制限がかかっていたら、そこまで。
0922nobodyさん2006/02/26(日) 17:55:40ID:???
関数つか変数だろ?
0923nobodyさん2006/02/26(日) 18:01:28ID:???
うむ。みんなすごいな。
0924nobodyさん2006/02/26(日) 18:09:45ID:???
なんかもう全部の質問がネタに見えてきた
末期かな
0925nobodyさん2006/02/26(日) 18:23:15ID:???
御臨終です
0926nobodyさん2006/02/26(日) 18:57:50ID:???
>>920
ごめんなさい、自鯖というのは何でしょうか?
それでテストということは、テストを行う環境ということでしょうか?
0927nobodyさん2006/02/26(日) 19:40:19ID:???
http://pc8.2ch.net/mysv/
0928nobodyさん2006/02/26(日) 19:48:41ID:???
だってネタだし。
0929nobodyさん2006/02/26(日) 21:04:48ID:???
屑どもが・・・
0930nobodyさん2006/02/26(日) 21:54:22ID:???
IPアドレスを変化させてスキャンするようなものを書きたいのですがうまくいきません。
どのように書いたら良いのでしょうか?変数の選び方が間違っているのでしょうか?

ちなみに、現在は下のプログラムで、"192.168.0.1:80"をポートチェックしています。

for ($i = 0; $i<3; $i++)
{

$port=80;
$ip_add=192.168.0.1;
#↑の行を $ip_add=192.168.0.1+$i; みたいにしたい。

&CheckPort($portNo,$ip_add);

}
0931勉強中2006/02/26(日) 22:16:58ID:???
Perlでは、
「NULL」と「LOW-BALUE(1バイトの'00')」は
違うものなのでしょうか???
0932nobodyさん2006/02/26(日) 22:33:06ID:???
Perl使った事あるのでしょうか???
0933nobodyさん2006/02/26(日) 22:35:33ID:???
PerlにNULLなんてないよ。
0934 ◆TWARamEjuA NGNG
>>930
32bits整数にしちゃうと楽かも♪
0935nobodyさん2006/02/26(日) 22:57:08ID:???
ちなみに文字列とかにはヌル文字('¥0')使えるよ。
Cと違ってperlは文字列長を管理してるからヌル文字が境界にならない。

1文字だけの文字列を作っても、
内部ではreallocが多くならないように、長めにメモリが割り当てらる。
で、文字列長は1文字、とスカラ構造体のどっかに値が入る。
なので文字列にヌル文字入ってても平気。
0936nobodyさん2006/02/26(日) 23:59:32ID:???
何か知らんけど、気が済むまでスキャンしてろ。

my $port = 80;
for (my $x = 0; $x < 256; $x++) {
for (my $y= 0; $y < 256; $y++) {
my $ip_addr = sprintf("192.168.%d.%d", $x, $y);
CheckPort($port, $ipaddr);
}
}

0937nobodyさん2006/02/27(月) 00:22:17ID:???
痛いソース・・・
0938nobodyさん2006/02/27(月) 00:46:54ID:???
>>937
もっとマシに書ける?
わかりやすく、かつ、バグがない書き方だと思うけど。
0939nobodyさん2006/02/27(月) 01:17:08ID:???
以前に作った IP アドレスを10進数に変換する関数だけどつかってみてくらさい
ただ、自分の環境でしかテストしてないので間違いがあるかもしれないです

戻り値が 0 の場合はエラー判定してください

sub ip2dec{
  my($ip) = $_[0];
  my($basedec) = 256 * 256 * 256 * 256; # ベースとなる値
  my(@quadip) = (0, 0, 0, 0);
  my($ipdec) = 0; # 10進に変換された IP

  @quadip = split(/\./, $ip);
  # 全ての値が 0 〜 255 に収まってるかチェック
  for(my $i = 0; $i < 4; $i++){
    if(($quadip[$i] < 0) || ($quadip[$i] > 255)){
      return 0;
    }
  }
  for(my $i = 0; $i < 4; $i++){
    $basedec = $basedec / 256;
    $ipdec += $basedec * $quadip[$i];
  }
  return $ipdec;
}

0940nobodyさん2006/02/27(月) 01:17:53ID:???
>   my($ip) = $_[0];

shift 使えよ。
0941nobodyさん2006/02/27(月) 01:23:23ID:???
修正した
my($ip) = $_[0] || "";
0942nobodyさん2006/02/27(月) 01:29:03ID:???
>>939
取りあえずfor (my $x = 0; $x < 256; $x++)→for (0 .. 256)な。
0943nobodyさん2006/02/27(月) 01:29:05ID:???
それだと 0 が渡ってきたとき "" になるんだよね。
0944nobodyさん2006/02/27(月) 01:29:59ID:???
>>942
/16 用にネストしてるけど、どうするんだろう。
0945nobodyさん2006/02/27(月) 01:49:09ID:???
my @ip = (192, 168, 0, 0);

foreach(1..65537){
print join('.', @ip), "\n";

foreach(reverse @ip){
($_ = $_+1 & 255) and last;
}
}
0946nobodyさん2006/02/27(月) 01:52:39ID:???
そんなひねくれた書き方すると、バグ探しが面倒。

でさ、65537 って、0x10001 なんだけど。
0947nobodyさん2006/02/27(月) 01:58:31ID:???
>942
$x なんて使ってないし・・・

>943
my($ip) = $_[0] || "";
そこには書かれてないけど
if(!$ip){ return 0; }
で抜けるようにした


ちなみに
&ip2dec("220.110.54.66");
みたく呼ばれることを想定
0948ヽ(´ー`)ノ ◆.ogCuANUcE 2006/02/27(月) 01:59:20ID:???
黙って Socket::inet_aton() か Socket6::inet_pton() 使えよ。
0949nobodyさん2006/02/27(月) 02:00:59ID:???
あるものに頼ってばかりいると「思いつく力」 が欠けてくるので
出来るところは自分で書いた次第です
09509452006/02/27(月) 02:02:33ID:???
my $ip = unpack("N", pack("C4", (192, 168, 0, 0)));

foreach(0..65536){
print join('.', unpack("C4", pack("N", $ip+$_))), "\n";
}

>>946
ただのカウンタだから。
カウントする回数は適当にどうぞ。
0951nobodyさん2006/02/27(月) 02:02:44ID:???
>>942
すごいスーパーハカーですね。

for ($x = 0; $x < 256; $x++)
と
for $x (0 .. 256)

って同じ結果を得られるんですかね?

0952nobodyさん2006/02/27(月) 02:03:39ID:???
>>944
そんならfor my $x (0 .. 256)でOKですぅ〜。
0953nobodyさん2006/02/27(月) 02:04:32ID:???
気付いても黙っていてあげるのもやさしさですよ?
0954nobodyさん2006/02/27(月) 02:05:17ID:???
>952
それでforのなかで$xが扱えるの?
いい事しりました
0955nobodyさん2006/02/27(月) 02:06:48ID:???
>>951
うっせ!そんなので下らない文字レスするなハゲ!あああ、私が悪うござんした。ケアレスミスぐらい多めに見ろやハゲ。
0956nobodyさん2006/02/27(月) 02:07:28ID:???
何気に人が多いでつね。
デスマ中でつか?
0957nobodyさん2006/02/27(月) 02:08:31ID:???
必死に文献探してやっと間違いが分かったくせして・・・
0958nobodyさん2006/02/27(月) 02:11:54ID:???
いやー、釣れた釣れた
0959nobodyさん2006/02/27(月) 02:12:47ID:???
大体、釣れたって後から宣言する奴は返す言葉がなくなった奴だな。
09609452006/02/27(月) 02:14:36ID:???
>>958
これ忘れ物ですよ。
ttp://images-jp.amazon.com/images/P/4759222197.09.LZZZZZZZ.jpg
0961nobodyさん2006/02/27(月) 02:21:18ID:???
書くソースもつまらなければ返しもつまらないな
0962nobodyさん2006/02/27(月) 03:10:33ID:???
初心者が集まって下らないことを言いあってる糞スレはここでつか?
0963nobodyさん2006/02/27(月) 07:31:56ID:???
&#65;をAにデコードするのはどうすればいいですか?
0964nobodyさん2006/02/27(月) 08:37:23ID:???
my $string = "???";
$string =~ s/?([0-9]+);/chr($1)/eg;
print $string; #ABC
0965nobodyさん2006/02/27(月) 08:38:12ID:???
1行目みすった。
my $string = "&#65;&#66;&#67;"
0966nobodyさん2006/02/27(月) 09:47:10ID:???
2行目も
0967nobodyさん2006/02/27(月) 09:59:42ID:???
ほんとこのスレ初心者ばっかでワロタ
0968nobodyさん2006/02/27(月) 10:15:42ID:???
↑初心者
0969nobodyさん2006/02/27(月) 23:11:57ID:???
perlにて以下のような事は実装可能でしょうか。
可能であれば教えてくらはい。

ページAからページBに遷移した場合は1としてカウントし、
ページB内で何度更新しても1としてカウントする。
ページBからブラウザの戻るボタンを押してページAに戻り
再びページBに戻ってきた場合は1としてカウントする。

ただし、ページAはこちらでは操作出来ない(弄くれない)ものとする。

 
最初はリファラーチェックすればいけるかなぁと思ったんですが
ページAから遷移した状態のページBで何度更新してもページAの
リファラーが返っていたのでタメポですた。
何かいい案があれば教えてくらはいませ〜。
0970nobodyさん2006/02/27(月) 23:27:41ID:???
ページAでクッキーセットしてページBでクッキー削除
なのでページBでリロードしてもクッキーが取得できないのでカウントアップしない

ってのはどうだろか
0971nobodyさん2006/02/27(月) 23:34:59ID:???
セッション
0972nobodyさん2006/02/27(月) 23:39:18ID:???
>>970
レスありが�d

しかしながら>>969で書かせて頂きましたように
ページAはこちらでは操作出来ません。
よってページAでクッキーをセットってのが不可能となります。

またクッキーやJavaScript等は一切使えません。
そこ(ページAやページB)へアクセスしてくるのが
クッキーやJavaScriptに対応したものだけとは限らない為です。

わがまま言ってすいません。
0973nobodyさん2006/02/27(月) 23:46:22ID:???
こちらでは操作できないページAって、
早い話が「他人のサイト」扱いだと思えばいいの?
0974nobodyさん2006/02/27(月) 23:50:10ID:???
>>973
そのとおりです。
0975nobodyさん2006/02/27(月) 23:51:05ID:???
セッション使ったリロードチェックでやってる事と同じ事をすれば良い。
基本だから、セッション、リロードチェック辺りでぐぐって。
Bで毎回uniq IDを生成するんだよ。
0976nobodyさん2006/02/27(月) 23:51:34ID:???
んじゃログファイルにIP保存して戻るボタン押した時にそのIP削除&ロケーションで戻してあげな。
リロードしてそのIPあったらカウントしないってのはどう
0977nobodyさん2006/02/27(月) 23:52:53ID:???
>>972
CookieやJSオフにしているユーザのことを考えるなら、
リファラを送らないように設定しているユーザも考えることになると思うが。
0978nobodyさん2006/02/27(月) 23:57:02ID:???
変数 $testの内容が、同じディレクトリにあるtest.datにしたいのですが、出来るのでしょうか。
簡単すぎるのか、検索では出てきません。
よろしくお願いします。
09799692006/02/27(月) 23:59:40ID:???
>>975
了解です。
いろいろとググりましたが
もっとググってみます。

>>976
>>戻るボタン押した時にそのIP削除

知識不足で申し訳ないです。↑はどのようにやればいいんでしょうか?

>>977
確かにそうですね。
ごめんなさい。
0980nobodyさん2006/02/28(火) 00:00:59ID:???
>>978
検索語に何を使っているのか気になる。
ttp://www.google.co.jp/search?q=perl+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB
0981nobodyさん2006/02/28(火) 00:16:04ID:???
>>979
PHPのサンプルを見ると分かるかもね。
「セッション リロード対策」とかでググって。
そこまでやるかは別だけど。
0982nobodyさん2006/02/28(火) 00:37:08ID:???
>>979
<form action="cgiファイル" method=post>
<input type=hidden name=mode value=back2A>
<input type=submit value="Aに戻る">
</form>

--------
上で呼んだcgiファイル(Bでもいいや)で
・IPをログファイルから読み込んで削除
・最後にLocationでAに飛ばす
0983nobodyさん2006/02/28(火) 16:43:39ID:???
次スレ待ち保守
09849782006/02/28(火) 23:58:59ID:???
>>980 perl 外部ファイル などで検索して、この方法にたどり着いたのですが、できなかったので、質問させていただきました。
でも、いまやって見たら、無事にできました。 ありがとうございました。
0985nobodyさん2006/03/01(水) 13:00:29ID:042Ft4VL
http://tama.s68.xrea.com/tool/resize.html
ここみたいに画像を加工するツールを作りたいんですが、perlだけでできますかね?
0986nobodyさん2006/03/01(水) 13:08:50ID:???
Image::Magick 使えばかんたん。
0987nobodyさん2006/03/01(水) 13:49:58ID:???
Perl+sendmailのメールフォームなのですが、
無事送信出来る時と出来ない時があるのは、
Perlの書き方がまずいのでしょうか?
ググってみたものの、送信できない事はよくあるようですが、
(注意書きで「送信できない場合は[email protected]までご連絡ください」のような)
原因は何なんでしょうか?
0988nobodyさん2006/03/01(水) 13:58:52ID:???
どんなコードなのかわかんないから、まずいかどうかも原因もわかんないけど

> (注意書きで「送信できない場合は[email protected]までご連絡ください」のような)

これは action="mailto:〜" で片づけてる場合が多いんじゃないのかな。
あと、JavaScriptが効いてないと送信できないサイトでも見かけた。
0989nobodyさん2006/03/01(水) 14:05:37ID:???
Web サーバの error_log とかメールサーバの maillog は見れないの?
0990nobodyさん2006/03/01(水) 14:09:58ID:???
Perl使ってます
画像処理にimagemagicとGDと2種類あるようですが、
グラフとか書きたいならGD
グラフを書くこと以外ならImageMagic
っていう認識でいんでしょか?
09919872006/03/01(水) 14:35:24ID:???
>>988
ソース見てもらうのは悪いかなと思てたのですが…
うpしましうた。
※設定部分は省いてあります
http://up.spawn.jp/file/up12772.txt
ちなみに、JavaScriptは使ってません。

>>989
見れます。で、見てみました。
が、どうやら入力フォーム→確認画面までは到達し、その後送信ボタンを押しても何の反応もしなく
エラーすらも発生しないようなのです。
なので、それらしいログはなかったです。(まだざっと見ですが)


セキュティソフトとかが悪さしてる場合があるらしいですが、
4分の1の人が送れないらしいので、
さすがに問題は別なのかなと思ってます。
0992nobodyさん2006/03/01(水) 15:21:35ID:???
出力してる HTML が不完全とかは?
09939872006/03/01(水) 15:31:10ID:???
>>992
確認画面でのソースも確認したのですが、
特に問題はなさそうでした。
正常に送れている人もいるので…
0994nobodyさん2006/03/01(水) 15:49:19ID:???
>>991
クラックしてくださいと言わんばかりのソースでつね。
0995nobodyさん2006/03/01(水) 15:50:16ID:???
>&jcode'convert(*sub_msg,'jis');
> print MAIL "Subject: $sub_msg\n";

おい。RFC 嫁。
09969872006/03/01(水) 15:54:21ID:???
せめてものお詫びに次スレ立てました。
http://pc8.2ch.net/test/read.cgi/php/1141195171/l50

>>994
どの辺が?詳しく!!

>>995
ここ!?
0997nobodyさん2006/03/01(水) 16:05:34ID:???
ソースが未練
0998nobodyさん2006/03/01(水) 16:07:31ID:???
>997
直りんはダメな気配
ttp://up.spawn.jp/の上から5番目付近
0999nobodyさん2006/03/01(水) 16:07:37ID:???
referer チェックされてるっぽい。
1000nobodyさん2006/03/01(水) 16:12:06ID:???
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。