Perlコーディング初心者質問スレ Part 41
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
05/03/10 00:47:16ID:sT66OcmD【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0002nobodyさん
05/03/10 00:47:50ID:sT66OcmD△▲ WebProg 初心者の質問 Part11 ▼▽
http://pc5.2ch.net/test/read.cgi/php/1101635909/
CGIだけど、なんか質問ある? Part 12
http://pc5.2ch.net/test/read.cgi/php/1097334246/
【Perl,CGI】参考書籍 第三版
http://pc5.2ch.net/test/read.cgi/php/1030209573/
【Perl】ファイルロック(排他処理)について語ろう
http://pc5.2ch.net/test/read.cgi/php/1024795138/
★負荷軽減対策委員会(Perl、PHP)★
http://pc5.2ch.net/test/read.cgi/php/1034645635/
Perlモジュールについて
http://pc5.2ch.net/test/read.cgi/php/997829243/
CGIに依存しないPerlの話題一般/Part2
http://pc5.2ch.net/test/read.cgi/php/1030548610/
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc5.2ch.net/test/read.cgi/php/1077525387/
【 スクリプト改造依頼スレ 】(丸投げ) part3
http://pc5.2ch.net/test/read.cgi/php/1105046286/
0003nobodyさん
05/03/10 00:49:42ID:???0004nobodyさん
05/03/10 00:51:53ID:???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
0005nobodyさん
05/03/10 00:52:43ID:???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さん
05/03/10 00:53:19ID:???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さん
05/03/10 00:54:37ID:???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/ (前スレ)
0008nobodyさん
05/03/10 00:55:10ID:???[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/
[本]
リャマ: http://www.oreilly.co.jp/BOOK/lperl3/
駱駝: http://www.oreilly.co.jp/BOOK/pperl3v1/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/BOOK/pcook/
[オンラインマニュアル]
Perldoc.com: http://perldoc.com
perldoc.jp: http://perldoc.jp
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/%7ekbk/perl5.005/
[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://member.nifty.ne.jp/hippo2000/
[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
0009nobodyさん
05/03/10 01:03:06ID:???過去ログ貼るとき「httpが多すぎます」って出た。こんな制限あったんだ
そそ、「コーディングとは云々」ってやつ無かったけどあれやめたの?
前スレ終盤、とんでもないスレ違いの書き込みがあったので気になりますた
0010nobodyさん
05/03/10 02:53:34ID:???$value =~ s/\xa5\xa4/`/g;
$value =~ s/\xa4([\xa1-\xfe])/\xa5$1/g;
$value =~ s/`/\xa5\xa4/g;
とやればできるとなんとかたどり着いたのですが、この逆の
カタカナ -> ひらがな 変換がどうしてもヒットしません。
ご教示いただけますと幸いです。
0011nobodyさん
05/03/10 08:33:39ID:Cjqv3NW2ボタンを押して、ページを切り替えるタイプの掲示板cgiのログを落とせるようにするには
どうすればいいのですか?
getでページ切り替えを送信する掲示板ならまだできそうですが、postで情報を送信する掲示板だとどうしていいかわかりません。
0012nobodyさん
05/03/10 08:40:58ID:Cjqv3NW2よくわかんないけど
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&q=%83%4A%83%5E%83%4A%83%69%82%F0%82%D0%82%E7%82%AA%82%C8%81%40perl&lr=
とかじゃだめ?
0013nobodyさん
05/03/10 09:01:21ID:???正規表現の左右逆にしてできないん?
>>11
getでできるならpostでもできるだろ。
何なら書き込みフォーム以外の <form method="post"> を <form method="get"> にすれば? とか。
0014nobodyさん
05/03/10 09:11:12ID:???関連(参考)スレに
・正規表現道場 [ http://pc5.2ch.net/test/read.cgi/php/1105930285/ ]
も加えるとか。
0015nobodyさん
05/03/10 15:29:02ID:Mmpnq31hhttp://www.hoge.com/index.cgi
にPOST形式でクエリを送り付けたいのですが不可能ですか?
この送り先は自分のCGIではないです。
CGIの起動はcronで毎日1回です。
getならリダイレクトとかでできると思いますが、POSTはどうすればいいんでしょうか?
0017271
05/03/10 17:35:54ID:0qqwutepcsvが","のみで区切られているときは、split(/\,/,$file)
等で読み込みできます。
しかしcsvファイルがaaa,"bbb,ccc",dddのようになっている
時に上手く分割する方法を思いつきません。どおすればいいのでしょうか?
0020nobodyさん
05/03/10 17:53:11ID:???0021nobodyさん
05/03/10 17:57:38ID:???0022nobodyさん
05/03/10 18:06:19ID:???DLしてみたら31万バイトもありやがる。これじゃ鯖が可愛そうな
んで、自分でそのときの必要に応じて作ったほうがいいと思うが
どうよ。漏れは>>10じゃないが。
0023nobodyさん
05/03/10 18:12:19ID:???こいうこと?
perl -e '$str="aaa,\"bbb,ccc\",ddd"; @str=split(/,\"?/, $str); print $str[1], "\n";'
bbb
002523
05/03/10 18:16:07ID:???split(/\"?,\"?/, $str);
すかす変なデータやなぁ
0026nobodyさん
05/03/10 18:24:49ID:???Text::CSV か DBD::CSV を使っといた方が良さげ。
0027nobodyさん
05/03/10 19:57:46ID:???use String::Multibyte;
my $euc = String::Multibyte->new('EUC_JP');
my $kana = $euc->mkrange('ァ-ン');
my $hira = $euc->mkrange('ぁ-ん');
my $kanahira = $euc->trclosure($kana, $hira);
my $value = 'ヌルポ';
$value = $kanahira->($value);
--
perl 5.8以降
use encoding "euc-jp";
my $value = 'ヌルポ';
$value =~ tr/ァ-ン/ぁ-ん/;
0028nobodyさん
05/03/10 19:59:47ID:0qqwutep皆様ありがとうございます。
>>17
>いったい区切り文字は何なんだよ。
>," なのか ", なのか , なのか?
>, なんならそれでできるはずだが
区切り文字は,なのですがデータ中に,があった場合に
データがカンマやダブルクォートを含む場合には
"(ダブルクォート) で囲むというルールがあるので
困っていました。
結局下のようなモジュールを使用して解決しました。
http://www.nsknet.or.jp/~kamichan/prog/CSV_pm.html
003023
05/03/10 22:15:15ID:???0032nobodyさん
05/03/10 22:30:19ID:???ちょっとちょっかい出されたくらいで不毛な煽りで返すのは大人げないからやめれ。
003323
05/03/10 22:31:42ID:???(´Д`)
( 八)
〉〉
スミマセンスミマセン
0034nobodyさん
05/03/10 22:34:02ID:Lndb2Cof■■■ お勧めレンタルサーバー ■■■
【ホームページを作るならここをあたれ!】
A:無難なサーバー。 お勧め!!
ttp://www.webspeed.ne.jp/
ttp://www.wadax.ne.jp/
ttp://www.ktplan.ne.jp/
ttp://www.wakwak.net/
ttp://www.cpi.ad.jp/
ttp://solid.ad.jp/
B:ある程度の障害は大目に。
ttp://www.binboserver.com/
ttp://s55.net/
ttp://www.j-navi.com/
ttp://domainya.net/
ttp://www.j-speed.net/main/
ttp://www.cyberjellyfish.com/
0037nobodyさん
05/03/11 07:04:53ID:???003915
05/03/11 11:01:25ID:BXH5EoKaモジュールですか?探して見ます。
004015
05/03/11 11:21:11ID:BXH5EoKa今ここでLWPについて見てますが、英語であんまりわかりません。
とりあえずPOSTでクエリを送りつけるのはできるような感じですが、素朴な疑問があります。
例えば
http://www.hoge.com/test.cgi
というところにあるCGIが、ユーザからp=1という要求を受けた時に
http://www.hoge.com/file/
にユーザのIPアドレスをファイル名としたファイルを作成して、それの処理の正否を
ブラウザに出力するプログラムだったとします。
その時に
http://www.sample.com/send.pl
というのがcron起動でhttp://www.hoge.com/test.cgiにp=1という要求を送った場合には
しっかりhttp://www.hoge.com/test.cgiこのCGIはIP名のファイルを作成するのでしょうか?
cron起動だと出力内容を受け取れませんよね。もちろんsend.plの出力内容はとれますが、
send.plが何も出力せずにhttp://www.hoge.com/test.cgiにクエリを送った場合には
http://www.hoge.com/test.cgiこの出力内容もLinuxの方には受け取れない?それとも
受け取っているがtext/htmlのものは表示できないだけ?
0041nobodyさん
05/03/11 11:43:03ID:wWuZgVEwforeach (@QUERY){
($n,$v)=split(/=/);
next if $n eq "data" && $v !~ /[^\d\%]/ && (@data = split('%',$v));
$v=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$n=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
・・・
って書いてあったんですが、3行目のnextの部分が、どういう処理をしているのかがわかりません。
どなたか、日本語訳を教えてください。
004315
05/03/11 11:49:53ID:BXH5EoKaDBI程度しか使ったことない人間にとってはorz
でもこれを理解すればかなりのことができるような予感。
頑張ります。
>>41
next if 条件式
これは条件式が真であればそれ以降の処理をすっとばして次のループに移るのです。
つまり
$n eq "data" && $v !~ /[^\d\%]/ && (@data = split('%',$v));
$nを文字列比較してdataと同じで且つ、$vの中には\dと%以外が入っていて、
最後の代入文を実行する。
3つの文が全て新ならnext発動です。
004415
05/03/11 11:52:32ID:BXH5EoKaすみません。勘違いでしたm(_ _)m
とにもかくにもwwwってのはブラウザに限らないんですね。
LWPの解説をちょっと読んだらそういうことが書いてありました。
クローラーもLWP使えば作れちゃいそうな感じですね。
ただ、モジュールというよりモジュール群のようなので難しいです;
004641
05/03/11 11:55:17ID:wWuZgVEwいずれにしても、最後の代入文は実行されるということで
いいんですよね?
004715
05/03/11 11:59:20ID:BXH5EoKa&&という演算子を勉強するといいです。
0 && 1
この場合1は評価されません。
1 and 1
1は評価されます。
0048nobodyさん
05/03/11 12:00:25ID:???英語でわからんとかごちゃごちゃ難しいとか言ってないで
そこのサイト(ってCPAN本家だけど)の An Exampleだけで目的のことはできるような。
004915
05/03/11 12:02:58ID:BXH5EoKahttp://homepage3.nifty.com/hippo2000/perltips/LWP.html
今こっちの日本語ページで勉強してます。
LWPの全容を理解するのが大変なだけで、今回やりたいことだけに的を絞れば
そんなに複雑なことでもないんですね。
0050nobodyさん
05/03/11 12:06:46ID:???# ユーザ・エージェント オブジェクトを作成
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->agent("AgentName/0.1 " . $ua->agent);
これなんで
$ua->agent("AgentName/0.1 " . $ua->agent);
こんなことしてんだ?
$ua->agent("AgentName/0.1");
の間違いだろ。
005141
05/03/11 12:08:42ID:wWuZgVEw条件文の&&は 且つ という意味でいいと思っていますが。
しかし、最後の文は比較するのではなく、代入してるっぽいので
前の条件文が評価されなくても、代入されるのかなと思ってますが。
間違ってますか?
005248
05/03/11 12:11:10ID:???005415
05/03/11 12:28:51ID:BXH5EoKa他のページの出力内容を自分のページに埋め込むことができるというのはすごい!
LWPを紹介してくださってありがとうございますm(__)m
0055nobodyさん
05/03/11 12:45:14ID:???005641
05/03/11 12:57:15ID:wWuZgVEwということは、1つ目の条件式をクリアしたあと、
2つ目の条件式をクリアしたときにだけ
代入されて、次のループに移るってことですね?
0058nobodyさん
05/03/11 13:42:15ID:???$n = 100/49;
if ($nが小数点を含んでいたら){
int $n+1;
}
なんか面倒なのですがこれが普通ですか?
0059nobodyさん
05/03/11 13:43:56ID:???0060nobodyさん
05/03/11 13:47:09ID:???使う直前の方がいいですか?
後者だと重複useがでる可能性がありますが、それを良しとするなら見やすいですよね。
意見お願いします。
006215
05/03/11 14:20:21ID:BXH5EoKaところでこのLWPって制作側としてはものすごい便利ですが、これを使うと、
ユーザが直接アクセスしてもいないサイトへユーザの情報が自動的に送られてしまったりしますよね?
例えばとある悪質なアダルトサイトがあったとして、悪質だと気付かずにそこに
月額契約をした場合にその入力内容をそのまま他の数十のアダルトサイトへも
LWPでリクエストが送られて自動的に登録されてしまうような惨事も起きてしまう可能性もありますよね。
当然勝手に登録されたといっても、住所や電話番号からクレジットの暗証番号まで正確なので
下手したら裁判でも負ける気がするのですが・・・・
まあもちろんアダルトサイト管理人がLWPを使わずとも手動で顧客の情報で他のサイトにも
登録するのと同じことですが。
このあたりってみなさん気にしたことありませんか?
006310
05/03/11 14:30:12ID:???正規表現を逆にしてみたりPerlメモの文字コードの
正規表現を見ながら自分なりに書いていたつもりだった
んですけど、上手くいきませんでした。
Unicode::Japaneseは315,392 バイトあるということで、
プロジェクトマネージャに却下されました。。。
色々とご教示いただき、誠に有難うございました。
もしも カタカナ->ひらがな変換に成功した際はこちらで
報告させていただきます。
006415
05/03/11 15:05:14ID:???よくわかんないけど、jcode.plですぐできるんじゃないですか?
jcode::tr(\$str,"ア-ン","あ-ん");
もしも半角カナもというならこれをやる前に
jcode::h2z_euc(\$str);
をやるだけ。
バイト云々ならlength関数とか使いながら一旦適度な長さに分割してそれからくっつける。
そういうルーチンを自分で作ればいいけど何か問題でもあるのかな?
006515
05/03/11 15:07:40ID:???単に分割は危ないので、ちゃんと文字の区切りでやりましょう。
my @strings = $string =~ /[\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE]/og;
これはeucコードでなくてはならないので先にeucに変換して下さい。
006615
05/03/11 15:21:57ID:BXH5EoKa# リクエストを作成します
my $req = new HTTP::Request POST => 'http://www.perl.com/cgi-bin/BugGlimpse';
$req->content_type('application/x-www-form-urlencoded');
$req->content('match=www&errors=0');
今動作確認したらどうやら
$req->content('match=www&errors=0');
この値は自動的にURIエンコードしてくれてはいないみたいですが、
たとえば
hoge=あいうえお
なんて場合には自分で「あいうえお」だけエンコードしろっていう仕様なのでしょうか?
0067nobodyさん
05/03/11 15:29:44ID:???https以外で本名、住所書いたことないし。それもある程度有名なところ。
その他のwebで入力した情報は一般に公開したものと思ってるから気にしてないしそういうとこ個人情報は書かない。
4月から個人情報なんたらは始まるけどどうなんでしょうね。
0068nobodyさん
05/03/11 15:37:40ID:???よくわからん。そもそも勝手に登録されたものなんて無効だよ。
気にする必要なし。
006960
05/03/11 15:39:38ID:???0070nobodyさん
05/03/11 16:05:15ID:???ー
の文字がエラーになるって聞いた覚えがあるんだけど、EUCで書いてれば無問題?
0072nobodyさん
05/03/11 16:20:46ID:???そういうことをしてくれるモジュールってありませんか?
for(0..4){
print "3回目" if 3 eq;
}
とかできると便利なんですけどね。
0073nobodyさん
05/03/11 16:28:02ID:???0074nobodyさん
05/03/11 17:02:50ID:???0076nobodyさん
05/03/11 18:45:46ID:stOV0FtXprint "3回目" if /^3$/;
0077nobodyさん
05/03/11 19:20:11ID:???0078nobodyさん
05/03/11 20:08:10ID:???$value =~ s/\xa4\xa5/`/g;
$value =~ s/\xa5([\xa1-\xfe])/\xa4$1/g;
$value =~ s/`/\xa4\xa5/g;
0079nobodyさん
05/03/11 20:13:17ID:???ところで、ひらがな→カタカナの変換はあれで大丈夫?
$value = "ばぅばぅ";
$value = "靴が痛い";
こんなのが、ちとヤバイと思うのだけれど。
>>60
大抵は先頭だね。
でも、配布するモジュールでもなければ好きな所に書いていいと思うよ。
(それから、encodingは、エンコードを始める位置で宣言する必要があるはず。)
>>72
sub at($);
for(1..4){
print "3回目" if at 3;
}
sub at($){ $_ == shift }
# 意味不明な世界へようこそ。
008060
05/03/11 21:13:35ID:???やっと来た・・・・・
やはり先頭ですよね。でももしも間違って
100行目: use DBI;
.
.
.
700行目: use DBI;
とかしても表面上にはエラーにならないくらいだから、内部的にも何の問題もないんですよね?(encordingなどは別として)
0081nobodyさん
05/03/11 21:30:45ID:???実行時に評価されるのは require で。
0082nobodyさん
05/03/11 21:43:35ID:???useやrequireは何度呼び出しても問題にはならないことになっている。
モジュールを先頭で呼び出すのは分かりやすくする為にすぎないので、実際に使う分にはどこに書いても構わない。
0083nobodyさん
05/03/11 21:57:38ID:???大丈夫。
http://www.harukaze.net/~mishima/perl/man/perlfunc.1.html
> use Module
> 指定したモジュールから、現在のパッケージにさまざまな
> 内容をインポートします。 多くは、パッケージのサブル
> ーティン名や、変数名に別名を付けることで、実現されて
> います。 これは、
>
> BEGIN { require Module; import Module LIST; }
>
> というのと、全く同値です。
> require EXPR
...
> ファイルは、同じ名前で 2 回読み込まれることはありま
>せん。
http://www.harukaze.net/~mishima/perl/man/perlvar.1.html
> %INC ハッシュ %INC は、do や require によってインクルード
> された、個々のファイル名をエントリとして持っています。
> key は指定したファイル名で、value は実際に見つかった
> 場所となっています。 require コマンドは、指定された
> ファイル名が既にインクルードされているかを、この配列
> を使って調べます。
0084nobodyさん
05/03/11 23:40:01ID:???useは頭に並べておくのが良いと思います。
0085nobodyさん
05/03/11 23:55:38ID:???後からどんどんルーチンが増えていく時に、useだけルーチンから出しておくと、
何かと面倒。
なので俺は両方に書いてる。
0086nobodyさん
05/03/12 00:26:54ID:???ログインとかログアウトってどうやるんですか?
CGI::Session使えば簡単なセッションはできますが、相手のIDとPASSをセッションファイルに入れればいいのかな?
なんかセキュリティ云々がよくいわれてますが、どちらにしても言うほどのセキリティなんか実装しようがないですよね。
つまりどのレベルまですれば一般レベルなのかということです。
CGI::sessionでセッションIDはクッキーに焼くことで渡し、セッションファイルにIDとパスを。
IDとパスが実在すればログイン状態。
↑これはセキリティ的に足りないでしょうか?
0087nobodyさん
05/03/12 00:43:48ID:???・IPの一致チェック
・cookieはディスクに保存させない
・可能ならSSLを使用
スクリプト作成者にできることはこれくらいでは。
それと、パスは保存する必要なしかと。
0088nobodyさん
05/03/12 02:35:22ID:DLGfeKNq0089nobodyさん
05/03/12 03:03:55ID:???セッションで渡り歩かなくても済むような構成にしてしまうのも手。
渡り歩いた履歴はCookieに溜め込んで、最後のページでIDとPassを入力させて完了とか。
>>88
int()をちょいと工夫すればOK。マイナスには気をつけるよろし。
0090nobodyさん
05/03/12 07:24:17ID:???透過PNGの出力ができないんだけど、仕様ですか?
(透過しない)
透過GIFならできました。
0093nobodyさん
05/03/12 15:33:01ID:???0095nobodyさん
05/03/12 17:09:44ID:???0096nobodyさん
05/03/12 19:44:08ID:???ちょっといまさらだけど。
useは、通常の実行文ではなくて、コンパイル中に実行される文だから、普通は先頭。
例えば、
1 + 1;
use hoge;
2 + 2;
とか、書いてしまっても、
絶対にuseから処理される。
if(bool){
use hoge;
}
とか書いても、ifとか、そんな次元じゃなく、
1番最初にuseが処理される。
だから、普通は先頭に書く。
実行結果は、どこに書いても同じになるかもしれないけど、やっぱ普通は先頭。
スコープに影響するプラグマモジュールなら、話は別で、
適切な場所に書いておくよろし。
(ただし、この場合も実際にはuseは最初に処理されている)。
requireは、実行中に処理される普通の文なので、常に適切な場所が良いと思う。
でも、どこに書いても構わないなら、やっぱ先頭がいいなー。わかりやすいから。
0097nobodyさん
05/03/13 08:25:22ID:oiuJgK8iメモリやばいですよね?
0101nobodyさん
05/03/13 11:44:21ID:???確認する方法はある?
0103nobodyさん
05/03/13 13:32:47ID:???chmod … || die
0104nobodyさん
05/03/13 15:24:50ID:???テンポラリクッキーを使うのですか?でもそれって相手側に協力を求める必要があるんですよね。
IPチェックはちょっと面倒ですが、ログイン時の人間であるかどうかを確認するとセキリティの向上には
なかなかの効果がありそうですね。
SSLは当然です^^
>>89
それだとちょっと利便性が落ちそうですね。
会員価格とかが実現しづらくなります。
あ、IPチェックも無理だ・・・・・
携帯は確か毎回違うIP提出してくるキャリアがあるんだった・・・・
0105nobodyさん
05/03/13 15:25:19ID:???0107nobodyさん
05/03/13 18:35:32ID:???perl全般の質問スレになったの?
0108nobodyさん
05/03/13 18:39:04ID:???0111nobodyさん
05/03/14 11:03:24ID:???それはスレを分けても変わらないでしょ。
基本的にこの板内のPerl関係の質問は大抵同じ人間が回答してるんだから
個人的には分割することに意義を感じられないな。まあ既に分かれてるものを
無理してくっつける必要があるというわけではないけどさ。
0112nobodyさん
05/03/14 13:44:36ID:???回答者はどのスレでも一緒だろうな
そろそろどっかとまた合併すんじゃね?
0113nobodyさん
05/03/14 14:07:00ID:???ヲタク板なんて細分化する必要ないのになぁ。
0114nobodyさん
05/03/14 14:52:44ID:???0115nobodyさん
05/03/14 16:09:47ID:???0116nobodyさん
05/03/15 10:01:02ID:3Ik8WJWFtp://tech.bayashi.net/pdmemo/gzip.html
これを/bin/gzipでなくCompress::Zlibでやりたいのですが
open(STDOUT,"| $gzip -1 -c");の部分をどのように処理すればいいか
分かりません。どなたかご教授願います。
0117nobodyさん
05/03/15 10:28:44ID:???0118nobodyさん
05/03/15 11:26:01ID:???ユーザ層ごとに分けてどうするのよ。どうせ同じPerlだろ。
周辺関連に差は出るが、広い意見だったりちょっと関係ない知識までつくのが大手掲示板の利点でしょ?
CGIは作れるがwindowsで使える簡単なソフトは作れないなんていう人はこの板には結構いそう。
なんかもったいない。みんな一緒なら、知らずに目に入って付く知識で十分できるようになるのに。
って個人的な意見ゴメンね,(__),
0120116
05/03/15 11:56:36ID:3Ik8WJWFご回答ありがとうございます。
教えていただいたwebに私のやりたい処理と似たような処理が紹介されてましたが
ちょっと違う感じです。スクリプト内部にprint文で書かれた内容全部をgzip圧縮させて
転送させたいです。スクリプトを貼り付けると、以下のような感じで処理したいです。
##の部分がうまくいきません。
#!/usr/bin/perl
use Compress::Zlib;
if ($ENV{'HTTP_ACCEPT_ENCODING'} =~ /gzip/) {
print "Content-type: text/html\n";
if($ENV{'HTTP_ACCEPT_ENCODING'} =~ /x-gzip/){
print "Content-encoding: x-gzip\n\n";
} else {
print "Content-encoding: gzip\n\n";
}
## ここで$bufferに<h1>Hello world</h1>以下の出力内容全てを代入したい
print Compress::Zlib::memGzip($buffer);
} else {
print "Content-type: text/html\n\n";
}
print "<h1>Hello world</h1>";
print "aaaaaa";
0121nobodyさん
05/03/15 12:24:33ID:???printした後は標準出力に渡されるのでPerlでは圧縮しようがないのだが。
パイプでつなぎたくなければ圧縮してからprintするしかなかろう
0122nobodyさん
05/03/15 12:35:49ID:???ID番号の出るスレッドに書き込みしたのですが
どうしてもそのレスを消したい場合に方法はないのでしょうか?
すごく困っています。絶対入れてはならないことをレスしてしまったもので・・
0123nobodyさん
05/03/15 12:39:02ID:???レスの削除は、削除依頼板。
http://qb5.2ch.net/saku2ch/
0124nobodyさん
05/03/15 12:52:16ID:???どこやねwん
0125116
05/03/15 13:03:28ID:???ご回答ありがとうございます。
tp://www.rfs.jp/sitebuilder/perl/02/08.htmlを参考にして子プロセスを作ることで出力を$bufferに代入することができました。
回答していただいた方々ありがとうございました。
参考までに成功したスクリプトを貼っておきます。(直したほうがいいところは指摘お願いします)
#!/usr/bin/perl
use Compress::Zlib;
if ($ENV{'HTTP_ACCEPT_ENCODING'} =~ /gzip/) {
print "Content-type: text/html\n";
if($ENV{'HTTP_ACCEPT_ENCODING'} =~ /x-gzip/){
print "Content-encoding: x-gzip\n\n";
} else {
print "Content-encoding: gzip\n\n";
}
if( open BUF, "-|" ){
while ($buf = <BUF>) {
$buffer = $buffer.$buf;
}
close(BUF);
print Compress::Zlib::memGzip($buffer);
exit(0);
}
} else {
print "Content-type: text/html\n\n";
}
print "<h1>Hello world</h1>";
print "aaaaa";
0127125
05/03/15 13:06:21ID:???それ以外で直したほうがいい部分は指摘ください。
0128122
05/03/15 13:31:20ID:???ですが、とてもじゃないけど、該当する項目がなくって無理でした。
というのが、自分の独り言を赤裸々にタイピングしてる途中に、
間違って「書き込む」のボタンを押してしまったんです。
しかも、人に知られたら恥ずかしいし、どうしようもない内容なんです。
で、IDが1日たっても変わってなかったってのもあって、きっと誰かが
それに気付いて恥をかくか、煽りの的になるなーと思うと、もー気になって
気になってパニックしてます。書き込みは慎重に行うべきですね。
0131nobodyさん
05/03/15 16:10:30ID:???MySQLだけでは無理だと思うのでPerlでやるしかないと思うのですが、
name,age,mail
太郎,19,[email protected]
次郎,28,[email protected]
....
こういうデータからnameの重複文だけ表示させたいのです。
こういうのって1回ずつやらないといけないのでしょうか?
my $data = select 1番目のデータ取得
my @重複 = select 色々 where name=$data
みたいに。(変な書き方ですみません。)
dataの中から例えばメールアドレスが重複してるのがあるかないか、あるなら
それをすべて表示。
一発で[email protected]という値がいくつ重複してるか、[email protected]がいくつ重複してるかを調べたいのです。
0133nobodyさん
05/03/15 16:40:21ID:???そう? 少し気になるとこもあるけど、まだマシな方だと思うなあ。
というわけで >>126 お手本プリーズ
013448
05/03/15 16:49:20ID:???>MySQLだけでは無理
普通にできますが
SELECT count(*) AS `count`, * FROM `table` GROUP BY `name` HAVING `count` > 1 ORDER BY `count` DESC
0135134
05/03/15 17:01:28ID:???SELECT count(*) AS `count`, `name` FROM `table` GROUP BY `name` HAVING `count` > 1 ORDER BY `count` DESC
0137nobodyさん
05/03/15 22:04:08ID:???0139138
05/03/15 22:06:55ID:???0142nobodyさん
05/03/15 22:17:03ID:???0143138
05/03/15 23:51:35ID:???圧縮された内容にヘッダが付かないようにしたのと、
forkに失敗したときの対策。
my $pid;
if ($ENV{HTTP_ACCEPT_ENCODING} =~ /((?:x-)?gzip)/){
my $encoding = $1;
if ($pid = open(BUF, "-|")){
local $/;
my $buffer = <BUF>;
close(BUF);
print "Content-encoding: $encoding\n",
"Content-type: text/html\n\n",
Compress::Zlib::memGzip($buffer);
exit;
}
}
if (not defined $pid){
print "Content-type: text/html\n\n";
}
print <<"EOF";
<html>
<head><title>test</title></head>
<body><h1>Hello world</h1><p>test-test</p></body>
</html>
EOF
exit;
0144nobodyさん
05/03/16 00:23:12ID:???my $encoding = $1;
local $/ = undef;
print "Content-Encoding: $encoding\n",
"Content-Type: text/html\n\n",
Compress::Zlib::memGzip <BUF>;
close BUF;
exit;
}
print "Content-Type: text/html\n\n",
<<"EOF";
<html>
<head><title>test</title></head>
<body><h1>Hello world</h1><p>test-test</p></body>
</html>
EOF
0145nobodyさん
05/03/16 01:23:42ID:???しかし local $/ = undef; っていいな、使える。 いままで気づかなかったよw
コードはいいけど、HTML中途半端なのは何でかなw
どうせ省略するなら title と p だけでいいのに。
0148nobodyさん
05/03/16 11:21:44ID:uAWX38vAURL中に?があるときだけうまく取り出せません
念のためエスケープしてもうまくいきません
たすけて
348 while ($main=~m/(<a href=\"(.*?)\">(.*?)(?: +?)?(?: +?)?<\/a>)/ig){
349 $matc1=$1;$matc2=$2;$matc3=$3;
350 if ($matc2 eq $matc3){
351 $main=~s/\Q$matc1/$matc2/;
352 }else{
353 $main=~s/$matc1/$matc3 $matc2/;
355 }#if else;
356 }#while;
0149nobodyさん
05/03/16 13:37:59ID:???いろいろ無駄っぽw
$main =~ s{<a href="(.*?)">\s*(.*?)\s*</a>}{ ($1 eq $2) ? $1 : $1 .' '. $2 }eig;
0150nobodyさん
05/03/16 13:40:10ID:???0151nobodyさん
05/03/16 14:36:59ID:???別にeqまでしなくていいでしょ。それならtitleとか考慮したら?
s{<a\s+.*?href="(.*?)".*?>\s*(.*?)\s*</a>}{$2 $1\n}ig;
0152nobodyさん
05/03/16 15:11:14ID:???え、なんで?
>>148 でそう書いてるなら、その条件で書くべきなのでわ。
どっからどこまでしたいのかなんてわからないよ。
あと、考慮するなら s オプションもつけとけば。
0155nobodyさん
05/03/17 06:55:12ID:???色々と絞ってみると下記のコードがエラーの原因だと分かったのですが、どのように治せばいいのでしょうか?
while ( my ($code, $ress) = each(%DATA{'expect'}) ) { }
%DATA{'expect'}はハッシュのハッシュです。これを%DATAに変えてみるとエラーが出なかったので、
ハッシュのハッシュをeachにぶちこんでるのが何か悪いのかな、と思いましたが解決方法が分かりません。。
どなたかご教授して頂けると幸いです。
0156nobodyさん
05/03/17 07:36:06ID:???015797
05/03/17 11:09:03ID:???はいwhileで1行づつ読み込んで処理しようと思います。ありがとうございます。
>>99
Flash用なのでテキストに書き出すことにしまふ。ありがとうございます。
0158125
05/03/17 12:01:21ID:???>>143のスクリプトでgzipの圧縮レベルを設定してみたのですが
Compress::Zlib::deflateInit( -Level => 1 );
という行を追加してCompress::Zlib::memGzip($buffer)の内容をファイルに書き出してみて
ファイルサイズを調べてみたのですが
-Level => 1の場合と-Level => 9の場合とでファイルサイズ変わんないのですが
使い方間違ってますか?
$bufferの中身はいろいろ変えてみましたが、やはり変わりませんでした。
0159nobodyさん
05/03/17 13:27:19ID:+OmKbfyB多数のファイルを生成する際に、ファイル名としてユニークな名前がほしいのですが
Perlの定石としてはどんな方法を用いるのでしょうか?
timeからファイル名を作ろうかと思ったんですが、同じ名前になることもあるだろうし
通し番号を持つのも面倒だし、と思いまして。
0160とうかつ
05/03/17 13:38:35ID:ZeP4drG9HTMLの<INPUT type="file">フォームで指定したファイルをcgiと同じ場所にアップロードしたいと思っていますが、
どうしても成功しません。、以下に関連ソースを書きます。
●フォームHTMLの中の記述
<FORM>
<INPUT type="file" name="pic_file_name" size="80">
<INPUT type="button" value="写真の追加" onClick=doAddPic()>
</FORM>
※この<FORM>〜</FORM>内に他に多数の<INPUT>あり。
●フォームHTMLのJavaScript記述
<SCRIPT language="JavaScript">
<!--
function doAddPic()
{
document.Form.action = "./pic_upload.cgi";
document.Form.method = "post"
document.Form.enctype= "multipart/form-data";
document.Form.submit();
}
//-->
0161とうかつ(続き)
05/03/17 13:39:20ID:ZeP4drG9use CGI;
my ($buffer);
$CGI::POST_MAX = 1024 * 1000; # max = 1MB
# オブジェクト作成
my $query = new CGI;
my $file_handle = $query->upload('pic_file_name');
# ファイル保存
my $save_name = "UploadFile.xxx";# 名前は仮
open (OUT, ">$save_name") || die "Can't open Savefile!";
binmode (OUT);
while(read($file_handle, $buffer, 1024))
{
print OUT $buffer;
}
close (OUT);
close ($file_handle);
0162とうかつ(続き)
05/03/17 13:39:57ID:ZeP4drG9・"UploadFile.xxx"ファイルは作成されるが、中身に書き込まれない。
・途中 print "$file_handle"; としても何も出力されない。
・クエリーname 'pic_file_name' でファイル名は送られている。ほかのINPUTデータについても正常に送られている。
・フォルダの権限は777
・perlのバージョンはv5.8.0
apacheは自分でインストールした物ですので特別な設定が必要だったらかけている可能性も考えられます。
もし可能性がありましたら教えて下さい。
何とか動かしたいと思っていますのでご支援お願いします。
0163nobodyさん
05/03/17 13:44:23ID:???定石とか知らんけど
my $file = time();
while (-e $file . '.txt') { $file++; }
$file .= '.txt';
とかじゃね?
0164nobodyさん
05/03/17 13:55:35ID:???それだけだと危ないよ。
>>159
1個のプロセスがファイル作成関連処理のをしている間は
他プロセスにはさせないようにしれ。
0165nobodyさん
05/03/17 13:57:08ID:???>・"UploadFile.xxx"ファイルは作成されるが、中身に書き込まれない。
>・途中 print "$file_handle"; としても何も出力されない。
もう答えは出てるじゃん。アホ?
0166nobodyさん
05/03/17 13:59:10ID:???じゃあ一旦 temporary.txt に書き出した後、
>>163 でチェックして rename するとか。 ダメ?
0168とうかつ
05/03/17 14:11:41ID:ZeP4drG9早速やってみました、JavaScriptを抜いた普通のHTMLでやってみましたところ
正常にアップロード出来てしましました、ありがとうございます。
それはそれでまた困ったな…submitボタンの区別が出来ない…
0169nobodyさん
05/03/17 14:18:07ID:???誰やねんおまえは。159か?
普通に排他処理使って特定ファイルを開いてる間に本処理をやればいい。
>>168
お前はこのスレ以前の問題なんじゃないか?
0171nobodyさん
05/03/17 14:29:18ID:???Perl の定石はしらないけど、漏れはいつも djb 風に、
sprintf("%d.%d.%d", time(), $$, $uid++);
みたいなのを使ってます ($uid はプロセス内で unique になる数字) 。
ファイルシステムをネットワークで共有している場合は、
さらにこれにホスト名も付けます。
0172nobodyさん
05/03/17 14:34:28ID:???できたのかw
で、なんで submitボタン〜 とか考える必要があるの?
というか type="button" で submit させる方がいかがなものかと。
とりあえず class と CSS で指定しとけば 「区別」 はつくんじゃないの?
>>169
いやファイルロックの話じゃなくて、ユニークなファイル名をつけたい、って話なのだよ。
0173nobodyさん
05/03/17 15:59:43ID:???だからAというファイル名がユニークであるか確認してからAというファイルを新規に作成
するには排他処などで他のプロセスをとめないいけないんだよ。
もしかして新規作成するファイルをロックするとかいう勘違いしているのかな?
0175nobodyさん
05/03/17 16:56:31ID:???・・・・あなた俺より詳しいじゃない。
個人的には48はこのスレで一番まともな回答者だと認知している。
なのであなたに「どうでしょうか」といわれるととても恐縮だorz
なんか鬱だな・・・
0176nobodyさん
05/03/17 17:01:32ID:Ykle1A6kどうすればいいのでしょうか?
なお、サーバはApacheです
0177nobodyさん
05/03/17 17:29:39ID:???ひとつのプロセスで複数のファイルを作る場合は、
time + ランダムな文字列(a-z..A-Z..0-9)数桁
でやってます。
100%名前が重ならないとは言えないけど、
仮に6桁の文字列を付加したとして、1秒に10個ファイルを作成した場合でも、
各ファイル名の重なる確率は約568億分の1
$time = time
@key = ('a'..'z','A'..'Z','0'..'9');
1 while (length($keys .= $key[rand(@key)]) < 6);
0178nobodyさん
05/03/17 17:33:19ID:???$name = time;
@key = ('a'..'z','A'..'Z','0'..'9');
1 while (length($name .= $key[rand(@key)]) < 16);
0179171
05/03/17 17:47:25ID:???本格的にやるなら Data::UUID を使うという手もあるかもしれません。
大袈裟過ぎるかもしれませんが。
0180nobodyさん
05/03/17 20:30:18ID:???マッチの誤動作防止のためにEncodeのdecode関数を使っているのですが処理がこれでもかと言うほど遅くなってしまいます。。
どなたかもっと早く処理できる方法をご存じでしたら教えて頂けないでしょうか。
0181159
05/03/17 20:47:11ID:???一意的な方法があるのかと思っていました。
今回使うファイル名はそのままURLになるので、単純なモノを使いたいと思います。
あと、これは興味本位なんですが2chのスレッド名に使われている方法はどんな方法なんでしょう?
0183nobodyさん
05/03/17 21:08:51ID:???うーん、マシンをもっと速いのに替えるとか
でもそんなに遅くなる? 俺んちの自宅鯖だと1Mbyte decode するのに0.3秒ぐらいだけど
>>181
There's more than one way to do it が perl の哲学だからな
2ちゃんねるのスレッドURLは unix timestamp
だから同一時刻に複数スレッドが立つと同じURLになってしまう
これを避けるために1秒に1スレしか立てられないよう排他処理をしているはず
0184nobodyさん
05/03/17 21:35:20ID:???utf8で処理している方は数分掛かり、そうでない物はすぐ処理が終わりますorzなんでだろう、、
もし宜しければソースを見て頂けると幸いです。指定されたスレッドのレス範囲から四桁の数字を抜き出し、
ヤフーファイナンスから取得した各種データと四桁の数字、その四桁の数字を指定したスレッドをeuc-jpで出力するスクリプトです。
http://noiser.info/script/utf8.txt
http://noiser.info/script/shift_jis.txt
0185nobodyさん
05/03/17 21:39:04ID:???Compress::Zlibのソース見ると、圧縮レベルを決め打ちしているので、
gzopen(),gzsetparams()を使うしかないと思われ。
>>183
> これを避けるために1秒に1スレしか立てられないよう排他処理をしているはず
仕様が変わっていなければの話だけど、
既に同じ番号のスレがあるときは+1して同じスレがあるかを再度チェック。これを繰り返してる。
0187nobodyさん
05/03/17 22:01:44ID:???漏れの環境 (Linux + perl 5.8.4) で実行させてみたが、どっちもすぐ終った
CPU時間でsjis版が0.199秒、utf8版が0.258秒
0190nobodyさん
05/03/17 23:02:05ID:???WindowsXP + perl 5.8.4 + CPU 700 (w で、 utf8 : 0.52 , shiftjis : 0.27 だった。
まー、UTF8 経由する分、ある程度は遅くなって当前なのでは?
0191エディタスレの416
05/03/17 23:25:47ID:???今、言語覚えようとはじめたんですが、
エディタをテラパッドに決め手
プログラムを打ち込んだのですが
プログラムはどうやって動かして確認するんですか?
winXPです。
0192nobodyさん
05/03/17 23:30:31ID:???0193nobodyさん
05/03/17 23:32:40ID:???0194nobodyさん
05/03/17 23:46:15ID:???0195エディタスレの416
05/03/17 23:48:07ID:???一歩踏み出せそうです感謝。
0196エディタスレの416
05/03/18 00:08:00ID:???独学が大変なのはわかりました^^;
0197nobodyさん
05/03/18 00:14:39ID:???まー 「サーバ立てる」 つっても、Apache (か Httpd とか) インストールするだけだし、実際やってみると思うよりは簡単だと思うけど。
0198nobodyさん
05/03/18 00:27:56ID:???0199184
05/03/18 06:37:22ID:???テストして頂いて恐縮です。僕の実行環境に問題があるみたいですね。。
僕の環境だとutfが二分ちょい、shiftjisが数秒です。(Athlon XP 2500+)
Perl入れ直したりしてみます。どうもありがとうございました(_ _)
0200nobodyさん
05/03/18 07:56:29ID:YtF+f69M登録後にメールを送る処理をするのに、次のように書いています。
メールは送られるのですが、なぜか一部の文字が化けてしまいます。
上の例だと「貼」、「構」あたりで化けてしまいます。
文字コードの関係で漢字が化けてしまうのでしょうか?
他の部分は化けていません。
解決策や原因がわかる方がいたら、教えてください、よろしくお願いします。
0201200
05/03/18 07:57:55ID:???sub mail_send{
my $temp=$_[0];
my $mail;
if ($m_sendtome){$temp.=" , $m_mailad";}
$mail = "To: $temp\n";
$mail .="From: $m_mailfrom\n";
$mail .="Subject: $_[1]\n";
$mail .="Errors-To: $m_mailad\n" if $m_sendtome;
$mail .="Content-Transfer-Encoding: 7bit\n";
$mail .="Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n\n";
$mail .=$_[2];
&jcode::convert(\$mail,'jis');
open (OUT,"| $sendmailpath -t") || die &error("sendmailが使用できませんでした。");
print OUT $mail;
close (OUT);
}
# メール本文
sub mail_ok{
return <<EOD;
登録が完了しました。下記のタグを貼り付けてください。
必要のない方は貼り付けなくても構いません。
署名
EOD
}
#メインの中でmail_sendを実行
&mail_send($mailadd,$honbun,&mail_ok());
0202200
05/03/18 07:59:27ID:???mail_ok の中の改行と違って1行になってしまいます。
原因・解決策わかる方、よろしくお願いします。
0204nobodyさん
05/03/18 08:17:16ID:???普通は、
use Fcntl;
...
my $name;
do{
$name = 適当に生成;
} until(sysopen(FH, $name, O_WRONLY|O_CREAT|O_EXCL));
...
close(FH);
みたいな感じ。
O_EXCLを使うことでファイルオープンとファイルの存在確認をアトミックに行えるところがミソ。
sysopenではなく、FileHandleまたはIO::Fileモジュール使うことが多いけど。
クックブックのレシピ「一時ファイルを作成する」を参照のこと。
もうちょっと複雑な処理が混ざったり、sysopen()やモジュールを使いたくないなら、
処理をきっちり排他制御する。
0205nobodyさん
05/03/18 08:23:44ID:???貼にx5Cが含まれているからでしょうね
return <<'EOD';
とシングルクォートでエスケープされないようにしたらいいかな
それとメールのヘッダーの改行は\r\nと決められてます。\nでも動作するようですけど。
0206200
05/03/18 08:32:51ID:???そういう風にしないとだめなんですね。
\nも直しました。
そしたら、文字化けが直りました!!!
なのですが、行数の関係で、実は省略してあったのですが、
sub mail_ok{
return <<EOD;
登録ID : $_[0]
登録が完了しました。下記のタグを貼り付けてください。
必要のない方は貼り付けなくても構いません。
署名
EOD
}
などとして、引数を含めています。
returnで返す前に、普通に変数に入れてから返したほうがよいでしょうか?
それとも、他にこの中でそのまま変数を表示させるよい方法があるのでしょうか?
重ね重ねすみませんが、可能かどうかだけでも教えてください。
よろしくお願いします。
0207nobodyさん
05/03/18 08:42:42ID:???じゃあ文字化け文字に\をつける
sub mail_ok{
return <<EOD;
登録ID : $_[0]
登録が完了しました。下記のタグを貼\り付けてください。
必要のない方は貼\り付けなくても構\いません。
署名
EOD
}
0208200
05/03/18 08:48:48ID:???漠然と中の文字がおかしいんだろうと思ってたものの、
原因がわからずに他のとこをいじったりして、ずっと悩んでました。
これでうまくいきそうです。
原因がわかったので関係するサイト等をぐぐって勉強してきます。
ほんとにどうもありがとうございました。
0209nobodyさん
05/03/18 20:32:06ID:???webページをhttpダウンロードしてくるプログラムを作りたいのですが、参考に
http://x68000.q-e-d.net/~68user/net/http-2.html
をコピペして実行すると、
print SOCKET "GET /index.html HTTP/1.0\r\n";
で止まって進まなくなります。
winME時代に同じことしたときは動いた覚えがあるので、
winXPのファイアウォールとウィルスセキュリティのファイアウォールを切ったのですが、まだ変わりません。
ほかにチェックする場所はありますか?
winXP sp2+perl 5.005_03+コマンドラインから実行中です。
0210209
05/03/18 20:33:20ID:???0211nobodyさん
05/03/18 21:12:40ID:???バカか
0212nobodyさん
05/03/19 01:17:30ID:???ヽ/⌒ヘ~ ,、
., 't,_,ノ丶 (__,\、 r'~゙i、 ばっかでーす♪
/ ! '` / ● ⌒ ヽ,、\,
(〇'゙ l__/ ● | `〜 〜 △v��
i、_,゙i し'i ゙〇ノ L,_il �厦
゙゙ー| ii r'゙\/゙i,~、 ∧∧∧
| " ij ノ/゙、/ ( )
,;、 > ゝ~゙ ゝ ソ ~ T ~
、(_/ (,,/ <ヽ | //
0213nobodyさん
05/03/19 12:39:33ID:VZlT0CLhperlは画像加工に弱いとのことで、調べてみた結果imagemagicというものをインストールするという手があるようですが、
しかし恐らくソースコードを置くだけのライブラリならともかく、稼働先でインストールのようなことは出来ない可能性があり
他の手段を探しています、何かメジャーな手はありませんでしょうか?
0214nobodyさん
05/03/19 13:26:09ID:a8Nv17ZI↓
また$textに別の文字を入力、『$textに入力された文字群』というくくりの中で、上のとは別の文字として保存
この保存した二つの文字を取り出して
『$textに入力した文字群から●を抽出し、@save内の変数$plusを付加する』
……というのは可能でしょうか?
『$textに入力された文字群』というくくりの中で、上のとは別の文字として保存
この動作が、どう書いたらいいものか解らなくて…
0216nobodyさん
05/03/19 14:24:33ID:???どちらも同じ大きさ?だと解釈されてしまって結果的にちゃんとフォーマット通りに出力されません。
どなたか解決方法を教えて頂けると嬉しいです。。
0217nobodyさん
05/03/19 14:36:51ID:???0218nobodyさん
05/03/19 15:08:22ID:a8Nv17ZI$textっていう変数に文字や数を複数回代入
その文字や数の中から特定の文字を検索する
という作業です
0219nobodyさん
05/03/19 15:24:36ID:???「フォーマット」 の意味がわからんw
>>218
@save = ( 'かくかく $text しかじか', 'あれこれ $text どれ●これ');
$text = 'ほげ●はげ';
foreach (@save) { s/\$text/$text/; }
したあと、
$plus = 'ひげ';
foreach (@save) { s/●/$plus/; }
ってこと?
でも 「●」 が $text 内にあったのかどうかは区別できないし、って?
さっぱりわからんw
同じプロセス内でやるなら、テキストに使われない文字でマークアップしとけばいいんじゃない?
0220nobodyさん
05/03/19 15:33:07ID:???もっとわかりやすく言わないとだめだよ。君の質問をイチイチ時間かけて解釈してまで
回答してくれるひとは滅多にいないから。
さぁもう1回頑張ってまとめてみなさい。
0221nobodyさん
05/03/19 15:34:20ID:???みんなformatって知らないのか…。俺もつかわんけど。
これ参考になる?
http://search.cpan.org/~dankogai/Encode-2.09/encoding.pm#KNOWN_PROBLEMS
0222nobodyさん
05/03/19 15:36:04ID:???$textの中から任意の文字列を取り出したいだけでしょ?
my ($new_text) = $text =~ /任意の文字列正規表現/;
0223nobodyさん
05/03/19 15:37:45ID:???my $kanji = "あああ青春の歌";
format STDOUT =
@<<<<<
$kanji
.
write;
これをこのままで実行すると「あああ」という結果が得られて、
use encodingなんかを使うと「あああ青春の」になるという話だとしたら、
フォーマットを書き直した方がいいと思うけど。
0224216
05/03/19 16:08:00ID:???Perlのformat機能です。
>>221
ありがとうございます。私も初めて使いました。少し必要になったので。。
なるほど。UTF8を一回shift_jisなどに変換して処理するという手もありますね。
>>223
わかりにくくてすみません。大体そんな話しなんですが、
format STDOUT =
@<<<<<<<@<<<<<<<に
'てすと','てすと2'や'tst,'tst2'をぶち込んだときに、
どちらも二つの要素の間の半角スペースの数が同じになってしまうので
フォーマットに一貫性が無くなってしまうんです。
つまり、'てすと','てすと2'や'tst,'tst2'を先ほどのフォーマットに入れると、"
てすと てすと2
tst tst2
となってしまうんです。use encodingしてない時みたいに
てすと てすと2
tst tst2
(半角スペース二個を全角一つに置き換えてます。)となって欲しいんですが。。(等幅フォントじゃないと分かりにくいかもです。)
0225nobodyさん
05/03/19 17:09:58ID:???Shift_JISと仮定して書いてみた。
use encoding "shiftjis";
use Encode;
my @str;
format RAW_FORM =
@<<<<<<<@<<<<<<<
map{ encode("shiftjis", $_) } @str
.
open(RAW_FORM, ">&STDOUT") or die $!;
binmode(RAW_FORM=>"raw");
@str = qw(てすと1 てすと2);
write RAW_FORM;
@str = qw(tst tst2);
write RAW_FORM;
close(RAW_FORM);
exit;
かなり強引。
0228218
05/03/19 18:44:09ID:???●は便宜上の記号でした。
もう最初書いたのから掛け離れてるんですが、やりたかったのは
@saveの中には$textと$plusと$rimitと$resultがある
$textが設定されたテキストフィールドに『ほげ』と入力すると、
datファイルに『ほげ』が保存される
処理A------------------------------------------------
$rimitが100に達した時、$result = $text . $plusみたいな感じで$textと$plusが連結
$resultがdatに保存される
-----------------------------------------------------
$textに改めて文字『ほげ』が入力される→datに保存される
※最初の『ほげ』とは別物として認識させたい
二度目の『ほげ』が処理A後$resultとしてdatに保存される時、
前回の『ほげ』と見分けがつかなくなるので
$plusは00、01…のようにナンバリング等で別々の値にしたい
$textに二度目以降文字が入力された時、datに保存されている$textの値が
上書きされるのかされないのかがまず判らなくて悩んでいた次第です
ホントすみません…
0231nobodyさん
05/03/19 22:08:29ID:???さっきまでたっぷり寝たのに日本語がわかんない
今度は寝すぎかな?
0234nobodyさん
05/03/19 22:51:45ID:???つまんないネタになるだけだと思うので
お邪魔しました
0235nobodyさん
05/03/20 00:27:27ID:???0236nobodyさん
05/03/20 00:33:08ID:???0237nobodyさん
05/03/20 02:15:24ID:???print "Hello Unko World!\n";
}
0238nobodyさん
05/03/20 03:10:16ID:???0239nobodyさん
05/03/20 03:22:48ID:???0240nobodyさん
05/03/20 11:54:57ID:???datファイルに書き足していきたいだけだろ?
ファイル操作のあたりを調べてみなさい。
それとテスト環境を作って自分で色々試しなさい。
どうせサーバーで直接試してるんだろうから。
0241nobodyさん
05/03/20 13:14:23ID:RNFnJUaq動作確認後、サーバーにアップロード、という手順で開発してるのですが、
perlスクリプトの一行目のperlスクリプトの指定を、
#!c:/Program Files/perl/bin/perl
から、アップロードの時だけいちいちサーバのパス指定に合わせて
#! /usr/local/bin/perl
と書き換えています。結構面倒だし、変更を忘れてエラーになることも
しばしばです。何かスマートな方法があるのではと思ってるのですが、
アドバイスいただければ幸いです。
0242nobodyさん
05/03/20 13:30:13ID:???0243nobodyさん
05/03/20 14:04:16ID:???Apache 1.3.xなら、.cgiの拡張子をPerlに関連付けすると、
シェバングパスを無視して実行してくれる。
私はそうしてる。
0245nobodyさん
05/03/20 16:24:18ID:???0246nobodyさん
05/03/20 17:22:51ID:Z0GAs5yv編集画面はしっかり編集されるのですが編集を実行すると
$params{'body'}の値が数字になってしまいます
$params{'body'}の部分にはタグも表示できるようにしてあるのですがそれが関係しているのでしょうか
三日三晩眺めてみてもどうしてもわかりません…
ご教授お願いします。
0247nobodyさん
05/03/20 17:26:02ID:???my $kugiri = "<<>>";
if ($params{'pass'} ne $pass) { &error("パスワードが違います"); }
# 編集
if ($params{'c'} eq "topedit") {
if (!$params{'body'}) { &error('入力がありません'); }
$params{'body'} =~ s/\r\n/\n/g;
$params{'body'} =~ s/\r//g;
$params{'body'} =~ s/\n/<br>/g;
$params{'body'} =~ s/&/&/g;
$params{'body'} =~ s/</</g;
$params{'body'} =~ s/>/>/g;
$params{'body'} = ~s/"/\"/g;
open(OUT,">setup.dat") || &error("setup.datを開くことができません");
print OUT "$params{'body'}$kugiri$params{'title'}$kugiri$params{'text'}$kugiri$params{'bgcolor'}$kugiri$params{'link'}$kugiri$params{'vlink'}$kugiri$params{'alink'}$kugiri";
close(OUT);
# 完了
&head;
print "<b>設定完了</b>\n";
&footer;
exit;
}
0248246-247
05/03/20 17:26:57ID:???$file = <IN>;
close(IN);
($body,$title,$text,$bgcolor,$link,$vlink,$alink) = split(/$kugiri/, $file);
$body=~s/<br>/\n/ig;
$body=~s/&/&/g;
$body=~s/</</g;
$body=~s/>/>/g;
$body=~s/\"/"/g;
&header;
print <<"EOM";
編集<br>
<form action="$cgi" method=post>
<input type=hidden name=pass value=$params{'pass'}>
<input type=hidden name=mode value=top>
<input type=hidden name=c value=topedit>
<textarea name="body" rows="10" cols="50" istyle="1">$body</textarea>
<br>
$title,$text,$bgcolor,$link,$vlink,$alinkのinputフォームは割愛<br>
それときったないソースでスマソ
<input type=submit value=送信>
EOM
&foot;
exit;
}
sage忘れスマソ…_| ̄|○
0249nobodyさん
05/03/20 17:58:57ID:???>$params{'body'} = ~s/"/\"/g;
0250T女の竹田
05/03/20 18:16:49ID:???せっかくPerlには便利なデバッガが付いてるんだから、使わないと損だよ。
三日三晩眺めてた、って。
CGIならその場で環境変数とか設定したらいいから。
0251246-248
05/03/20 19:22:11ID:???こういうポカミスって気付かないものですね
>250
Σ(´д`)それがありましたね
今度からはしっかりそれ試してます…
ではありがとうございました
0253nobodyさん
2005/03/21(月) 18:10:57ID:3f95qFz7何かよい方法はありますか?
具体的に言いますと、
$aaa[0]='bb';
$aaa[1]='aa';
$aaa[2]='cc';
を各値で昇順ソートし場合、@result=(1,0,2) という結果が欲しいのです。
下記のコードでは、それらしい結果は得られるのですが、確信が持てないのです。
$aaa[0]='bb';
$aaa[1]='aa';
$aaa[2]='cc';
$xxx[0]=0;
$xxx[1]=1;
$xxx[2]=2;
@result=sort {$aaa[$a] cmp $aaa[$b]} @xxx;
よろしくお願いします。
0254nobodyさん
2005/03/21(月) 19:48:18ID:???@result = sort{ $xxx[$a] cmp $xxx[$b] } (0..$#xxx);
@result = sort{ $xxx[$a] <=> $xxx[$b] } (0..$#xxx);
0255254
2005/03/21(月) 19:50:42ID:???my @result = sort{ $aaa[$a] cmp $aaa[$b] } (0..$#aaa);
0257nobodyさん
2005/03/25(金) 22:58:43ID:???0259nobodyさん
2005/03/26(土) 09:14:22ID:???0260nobodyさん
2005/03/26(土) 09:17:47ID:pZwBUwH20261nobodyさん
2005/03/26(土) 12:04:22ID:???0262nobodyさん
2005/03/27(日) 02:19:06ID:eF4YrThJaaa
aab
aac
aad
........
zzx
zzy
zzz
のように上から舐めていくのってどうすればいいですか?
0263nobodyさん
2005/03/27(日) 02:46:04ID:???for $y('a'..'z'){
print "$x$y\n";
}
}
0264nobodyさん
2005/03/27(日) 05:22:23ID:???while (++$str =~ /\A[a-z]{3}\z/) {
print "${str}\n";
}
0267262
2005/03/27(日) 10:17:27ID:???perlだけに時間さくわけにもいかんしな。
0268nobodyさん
2005/03/27(日) 10:18:22ID:???0269nobodyさん
2005/03/27(日) 15:26:22ID:???人にラクダ本すすめといて自分で読んでないやついるだろ!
0270nobodyさん
2005/03/27(日) 17:51:21ID:???0271nobodyさん
2005/03/27(日) 17:56:41ID:???perlだけに限らんけど、
there's more than one way to do it.
'aaa'..'zzz' つー記法はperlってこんなこともできるんだよスゲー、て紹介の仕方で良く引用されてるような。
0274nobodyさん
2005/03/27(日) 20:04:20ID:???0275nobodyさん
2005/03/27(日) 21:30:34ID:???0276nobodyさん
2005/03/28(月) 00:13:11ID:???最近はphpばかりでCGIではPerl使わないしなぁ。
'aaa'..'zzz'はちょっと感動。
試しにベンチ取ってみた。
Benchmark: timing 10000 iterations of A, B...
A: 3 wallclock secs ( 3.24 usr + 0.01 sys = 3.25 CPU) @ 3076.92/s (n=10000)
B: 2 wallclock secs ( 2.16 usr + 0.00 sys = 2.16 CPU) @ 4638.22/s (n=10000)
A=>>263
B='aa'..'zz'
0277nobodyさん
2005/03/28(月) 03:16:21ID:kLN9+ZWUいろいろ調べたけどわかりません。
socketとか使うんすかね?
ちなみにサーバーは@niftyです。
もしやsocketのせい?
0279nobodyさん
2005/03/28(月) 12:03:12ID:???10年以上昔の俺は赤ラクダを真剣に読んだ。当時はまだ読めた。
今青ラクダを2冊とも読み通せと言われるとちょっと辛い。
>>277
他サーバから http で get してきた HTML ファイルを表示したいのか?
ttp://oshiete1.goo.ne.jp/kotaeru.php3?q=1205000 を見る限り道は険しそうだが
0280nobodyさん
2005/03/28(月) 13:44:59ID:???ID(例えばdiaryとかtalkとか)を自由に登録・ID自体の編集もできるスクリプトになっています
実質カテゴリわけとかそんなかんじでしょうか。
open(IN,"$setup") || &error("開けない");
while (<IN>) {
($id,$disp) = split(/,/);
if ($id eq $in{'id'}) { &error('存在するIDです'); }
}
close(IN);
今は上記のようになっていますがこれですと
今編集しようとしている$setup内の行がマッチしてしまうわけで。
何か良い記述方法はないでしょうか?
0281nobodyさん
2005/03/28(月) 13:55:54ID:???open(IN,"$setup") || &error("開けない");
これなら読み込みしかできない。$setupのファイルは編集できない。
while (<IN>) {
($id,$disp) = split(/,/);
if ($id eq $in{'id'}) { $flag=1; &error('存在するIDです'); }
}
close(IN);
if ($flag == 1) {
open(OUT, ">> $setup") or die $!, "\n";
print "$id\t$disp\n";
close OUT;
とか。
0282nobodyさん
2005/03/28(月) 13:56:45ID:???0283nobodyさん
2005/03/28(月) 15:15:23ID:???・データファイルは
2,説明,
1,説明,
のようになっていて、複数登録が可能になっている(別サブルーチン)
・ID(変数は$id),説明($disp)をフォームから編集可能にしたい
例えばID2を1にする場合にはエラー,2を2のまま編集する場合はエラーは出さないようにしたい
・現状だと編集中のIDがマッチするためエラーが出てしまう
・編集中のID以外をマッチさせる方法はないか?と考えたが上手い記述が見つからず
・スクリプトの記述方法は某有名所にかなり依存
・排他処理関係の関数は抜かし、他も簡略化しつつソースを晒してみた
ttp://yu.to/perl/up/id.txt
281氏の書き方だとflag==1の時、つまり同IDがある時編集可能になっちゃいますよね
0284nobodyさん
2005/03/28(月) 15:21:44ID:???0285nobodyさん
2005/03/28(月) 15:32:19ID:???つーか何がしたいのかわからんのだが
IDと説明を入力させるんだろ?で、
・ID が存在しなかったら登録
・ID が存在したら説明を上書き
ってことか?しかしそうなると
>・ID(変数は$id),説明($disp)をフォームから編集可能にしたい
> 例えばID2を1にする場合にはエラー,2を2のまま編集する場合はエラーは出さないようにしたい
>・現状だと編集中のIDがマッチするためエラーが出てしまう
>・編集中のID以外をマッチさせる方法はないか?と考えたが上手い記述が見つからず
ここらへんが意味不明なんだが
0286nobodyさん
2005/03/28(月) 16:14:33ID:???・要求仕様自体がバグってる
のどっちかな気がする。
0288nobodyさん
2005/03/28(月) 16:43:13ID:???0289280=283
2005/03/28(月) 18:04:51ID:???>・絶望的に説明が下手
たぶんこれだなorz
こちらのしたいことが明確に伝わらなくて申し訳ないです
>・ID が存在しなかったら登録
はまあ合ってるんだけど
>・ID が存在したら説明を上書き
はちょっと違うかな
ID自体も編集できるようにしたいのです(説明はたんなるオプションでしかないから)
※
ユーザーアカウントをWEB上で登録・編集・削除したい…みたいな。
イメージとしてはそんなかんじです。
そういうアカウントとかだと登録はもちろん編集する時もIDについては重複させるわけにはいかないので。
>284氏に助言いただいたこともあるのでもう一回組みなおしたりググったりしてみます
0290nobodyさん
2005/03/28(月) 18:11:01ID:???0291nobodyさん
2005/03/28(月) 18:29:41ID:???当然といえば当然なんだが、idが変更されたかどうかを知るためには、
以前のid・新規idの2つがスクリプトに渡されなければならない。
0292nobodyさん
2005/03/28(月) 18:34:40ID:???データ構造の設計から見直した方が良いんじゃないですかね?
0293nobodyさん
2005/03/28(月) 19:55:25ID:TfqpURTV0297nobodyさん
2005/03/28(月) 21:23:02ID:???やっと分かった。
IDは使われていない番号への変更が可能ということなんだ。
すっきり。
データ構造とファイルの扱いが分からないので、簡単に。
編集=新しいIDの登録+古いIDの削除。
または、IDをただのデータとして扱ってIDを書き換える。
0298nobodyさん
2005/03/29(火) 17:27:53ID:???ラクダ本とやらを見に行ったらすんごく面白かった。
学生には高すぎるよorz
0299nobodyさん
2005/03/29(火) 17:33:36ID:???0300280
2005/03/29(火) 19:10:54ID:???至らない所が多々ありすみませんでした。
最初からそう説明してればよかったのか。
結局、297氏の案+αで自分のやりたいことができるようになりました。
もちっとスキルアップしてきますorz
それでは、スレ汚し失礼しました。
0301nobodyさん
2005/03/29(火) 21:35:34ID:???0302301
2005/03/29(火) 21:44:57ID:???@result{'minus30'}->[]という無名配列にpush出来る方法ってないでしょうか?
0303nobodyさん
2005/03/29(火) 21:54:38ID:???0304301
2005/03/29(火) 22:10:40ID:???ここら辺についての理解が怪しいので、もう一回勉強してきます〜。
0305nobodyさん
2005/03/30(水) 18:04:36ID:???一気にデリファレンスしてくれる関数が欲しいのですが
他にも方法があったら教えてください。
#一括デリファレンス関数の定義
sub list:lvalue{@_?(${$_[0]},list(@_[1..$#_])):@{[]}}
#以下使用例
@a = \($a,$b,$c,$d,$e);
if($case){
(list(@a)) = qw(aa bb cc dd ee);
}else{
(list(@a)) = qw(AA BB CC DD EE);
}
print "$a,$b,$c,$d,$e";
0306nobodyさん
2005/03/30(水) 19:45:23ID:???@a = (\$a,\$b,\$c,\$d,\$e);
0308nobodyさん
2005/03/30(水) 22:07:20ID:???sub list:lvalue{@_?(${+shift},list(@_)):@{[]}}
0310nobodyさん
2005/03/31(木) 05:57:08ID:???0311nobodyさん
2005/03/31(木) 06:09:24ID:???プロトタイプ宣言したほうがいいんかも。
てか、lvalueってPerl5.6以上限定だね。
sub list(@):lvalue{@_?(${+shift},list(@_)):@{[]}}
@a = \($a,$b,$c,$d,$e);
if($case){
(list @a) = qw(aa bb cc dd ee);
}else{
(list @a) = qw(AA BB CC DD EE);
}
print "$a,$b,$c,$d,$e";
0312nobodyさん
2005/03/31(木) 08:25:29ID:???http://www.bot-depot.com/forums/?showforum=12
ここの
http://www.bot-depot.com/forums/index.php?act=Attach&type=post&id=629
これを落としたんですが、上手く動きません…。
とりあえず最新のActivePerl入れてXP SP1上で動かしてるだけなんですが、
他に何か必要なんでしょうか。
落としたファイルの内書き換えた場所は、echobot.plの
my $handle = '自分のhotmailアドレス';
my $password = 'パスワード';
my $admin = '自分のhotmailアドレス';
のみなんですが…。
何かアドバイスなどよろしくお願いします…。
0313312
2005/03/31(木) 08:27:17ID:???よろしくお願いします…。
MSN 2.0 (01/21/2005) Rev: 84 - Checksum: 60068-NS18164-SB8878
SERVER ERROR : Authentication Error: No response from Passport server
ERROR : Trying to print 'PNG
' on an undefined socket
Caller trace:
0: MSN::error (MSN/Notification.pm, line 102)
1: MSN::Notification::error (MSN/Notification.pm, line 189)
2: MSN::Notification::_send (MSN/Notification.pm, line 519)
3: MSN::Notification::ping (MSN.pm, line 669)
4: MSN::do_one_loop (echobot.pl, line 44)
0314312
2005/03/31(木) 08:30:28ID:???質問がスレ違いならよろしければ該当スレに誘導して頂ければありがたいです。すいません。
0315nobodyさん
2005/03/31(木) 09:40:58ID:???軽い画像(5kb程度)なら上手くいくものが重い画像(10kb以上)になると
動作しなくなってしまいます。
・アップロード&保存
軽い画像→OK、重い画像→OK
・アップロード&保存&ImageMagick処理
軽い画像→OK、重い画像→×
・ImageMagick処理(別スクリプト)
軽い画像→OK、重い画像→OK
こんな感じで保存とImageMagick処理を同じスクリプトでやろうとすると
上手くいきません。画像処理の実行に関わらず、スクリプト内で
use Image::Magick;しているとダメポです。保存すらできません…。
どういう原因が考えられるでしょうか?
アドバイスお願いしますorz
0317315
2005/03/31(木) 13:11:59ID:???長くなりますがよろしくお願いします。
#マルチパートデータ解析
local($div,$id,$value,$filename,$minetype,$size);
$div = <STDIN>;
$div =~ s/\s+$//;
$line = '';
until($line =~ /^$div--/){
$id = '';
$value = '';
$filename = '';
$minetype = '';
$line = <STDIN>;
until($line =~ /^\s*$/){
return if eof(STDIN);
if($line =~ /\sname="([^"]*)"/i){$id = $1;}
if($line =~ /\sfilename="([^"]*)"/i){$filename = &trim($1);}
if($line =~ /^Content-Type:\s+(\s+)/i){$minetype = $1;}
$line = <STDIN>;
}
$size = 0;
$maxbyte = 1024*500;
$line = <STDIN>;
until($line =~ /^$div/){
return if eof(STDIN);
$size += length($line);
$value .= $line if ($size < $maxbyte);
$line = <STDIN>;
}
0318315
2005/03/31(木) 13:12:59ID:JNShQA97$param{$id} = $value;
$paramtype{$id} = $minetype if($minetype ne '');
}else{
$param{$id} = '';
$paramtype{$id} = 'big';
}
$paramfile{$id} = $filename if ($filename ne '');
}
#ファイル保存
$oname = &trim($paramfile{"file"});
&jcode'convert(*oname,'euc');
$oname =~ s/\\/\//g;
$oname = substr($oname,rindex($oname,"/")+1);
$type = $paramtype{"file"};
$bindat = $param{"file"};
if($type eq 'big'){&err;}
if($bindat =~ /^\s*$/){ $chk='ok';}
elsif($bindat =~ /^GIF\d\d[a-z]/) { $chk='ok'; }
elsif($bindat =~ /^\xFF\xD8\xFF\xE0\x00/) { $chk='ok'; }
elsif($bindat =~ /^\x89\x50\x4E\x47\x0D\x0A\x1A\x0A/) { $chk='ok'; }
elsif($type =~ /image\/gif/i){ $chk='ok'; }
elsif($type =~ /image\/jpeg/i){ $chk='ok'; }
elsif($type =~ /image\/x-png/i){ $chk='ok'; }
else{ $chk='no'; }
if($chk ne 'ok'){ &err;}
$fullpath = "$imgdir$oname";
if(-f "$fullpath"){&err;}
0319315
2005/03/31(木) 13:13:24ID:???unless(open(FILE, ">$fullpath")){&err;}
binmode(FILE);
print FILE $bindat;
close(FILE);
chmod (0666,$fullpath);
use Image::Magick;
$osize = Image::Magick->new();
$osize->Read($fullpath);
($w,$h) = $osize ->Get('width','height');
##以下略
}
ageてしまったごめんなさい。
0320315
2005/03/31(木) 13:17:16ID:???化け部分はエラー用のサブルーチンに跳ばしてます。
0321nobodyさん
2005/03/31(木) 13:28:14ID:???0322315
2005/03/31(木) 14:02:42ID:???レスありがとうございます。
サーバ側では特にエラーは出ていないようです。
use Image::Magick;しなければちゃんと動くんですが、
↑があるとファイル保存以下をスッ飛ばしてスクリプトの
最初の行に戻ってしまうような感じです。
アップロードしたのが軽いファイルなら最後まで正常に動きます。
どこが悪いのか自分ではさっぱり…。
0323nobodyさん
2005/03/31(木) 15:52:09ID:???CGI.pm使った方が楽だと思うのだが...
使おうとしたが何か問題があってどうしても使えないとか、
CGIの解釈を自分でやる練習ならしょうがないけど。
0324315
2005/03/31(木) 21:35:58ID:???CGI.pmを使った時、パラメータ名の指定に
for($i=0; $i < $datlist; $i++){
$hoge = $query->param("file_$i");
}
という感じに変数で指定ってできるんでしょうか?
これやると上手くいかなかったもので…。
0325315
2005/03/31(木) 23:39:26ID:???CGI.pmだと好感触みたいなのでこれでもう少し頑張ってみます。
ありがとうございました >323
0326nobodyさん
2005/03/31(木) 23:56:49ID:???これ見てファクトリパターンかっこええなぁと思ったので、ちょっとやってみるかと思ったんですが、
> return "Message::".$classname->new(%{$arg_ref});
ってことは "Message::".$classname なクラスを事前に読み込ませておかないといけないんですよね?
まさか文頭に「読み込まれる可能性のあるクラスを全部書いておく」なんてことはないんでしょうが、
直前で use "Message::".$classname; とかやっても平気なんでしょうか?
0327nobodyさん
2005/04/01(金) 00:04:45ID:???>まさか文頭に「読み込まれる可能性のあるクラスを全部書いておく」なんてことはないんでしょうが、
ん? そうじゃないの? そのときどきにrequireする物なのかな? useはNGだお
0328nobodyさん
皇紀2665/04/01(金) 13:45:49ID:JJhcoQhv$_ = $hoge;
if((s/-/-/g) > 10){
print "10以上";
}else{
print "10以下";
}
0329328
皇紀2665/04/01(金) 13:47:15ID:???0331nobodyさん
皇紀2665/04/01(金) 14:44:13ID:XdlrhN9n0333328
皇紀2665/04/01(金) 15:34:10ID:???途中で書き込んだ為、誤って2スレ分になってしまいました。
語尾によって気分を害されたのであれば申し訳御座いません。
また御機会があれば宜しくお願い致します。
0336nobodyさん
皇紀2665/04/01(金) 18:00:41ID:???$_ = $hoge; # ←する理由がわからん
(ふつう $_ に意識的に代入するかなぁ…?)
$count ++ while ($hoge =~ m/-/g);
とかも可能
0337nobodyさん
皇紀2665/04/01(金) 19:13:27ID:???おそらく if (($hoge =~ s/-/-/g) > 10) と書けるとは知らなかったと思われ。
0338326
皇紀2665/04/01(金) 21:21:39ID:???うお、マジすか。
DBIが似たような仕組みらしいので、ちょいと中をのぞいてみても、
どのへんでこの問題を解決しているのかサッパリです。
ソースのどの辺りで解決しているのかおわかりの方はいませんか?
0339nobodyさん
皇紀2665/04/01(金) 22:48:38ID:ybs/IKbSDBIが読み込むドライバのことを言っているのかな。
どうせuseかrequireかdoを使ってるんだろうと
あたりをつけてサーチかませばDBI.pmのサブルーチン
install_driverの中でreqireしてごにょごにょしてる
ところはすぐ見つかると思われる。
ただドライバはDBI::DBDに説明されているような構成
になってることを要求されていて一般的なモジュール
とはちといえないから、参考になるかどうかはびみょー。
0340328
皇紀2665/04/01(金) 22:53:02ID:???ありがとです。度忘れしてました。
tr/-//採用させていただきます。
use Benchmark;
$hoge = "あいうえお-かきくけこ-さしすせそ-たちつてと-なにぬねの-はひふへほ";
timethese(100000, {
sample1 => sub { if(($hoge =~ tr/-//) > 10){} },
sample2 => sub { if(($hoge =~ s/-/-/g) > 10){} },
});
Benchmark: timing 100000 iterations of sample1, sample2...
sample1: 0 wallclock secs ( 0.05 usr + 0.00 sys = 0.05 CPU) @ 2127659.57/s (n=100000)
sample2: 0 wallclock secs ( 0.22 usr + 0.00 sys = 0.22 CPU) @ 456621.00/s (n=100000)
0341nobodyさん
皇紀2665/04/02(土) 00:17:03ID:m1Urw5SAhttp://ex9.2ch.net/test/read.cgi/soccer/1112223516/
瓦斯スレ突破ゲーム
瓦斯サポの突破力をみんなで身につけよう!!
※瓦斯スレにメール欄「小鹿」本文「お疲れ様でーす」と書き込む
※5分間書き込みがなかったら「突破成功」と再書き込みで成立
※なんらしかレスがあったら失敗
※「フロント」か「朝日」の書き込みがあったら
シーチケ取り上げられるだけで済みます。
0342326
皇紀2665/04/02(土) 02:28:50ID:???仰せの通り、該当部を覗いてみると、
requireでドライバを読み込んで、
読み込まれたドライバはDynaloaderをuseして、
bootstrapで自分自身をロードしているらしい
……具体的にはワケワカメなのですが。
詰まるところ、これが動的なインポートというやつなのでしょうか?
まんまパクってやれば、いちいち「読み込まれる可能性のある(以下略」を書かなくても良いのかなぁ。
0343nobodyさん
2005/04/02(土) 13:44:50ID:BYWwUZK5環境変数の取得の仕方は分かります。
プロキシかどうかを判定すにはどうすれば良いのでしょうか?
0344nobodyさん
2005/04/02(土) 14:12:01ID:???0345nobodyさん
2005/04/02(土) 14:25:00ID:BYWwUZK5個人的には、できるだけ強力な制限にしたいのですが、
面倒くさいようでしたら、さわりだけでも教えて頂けると助かります。
ぐぐったんですけど、検索の仕方悪いのかサーバがどうのこうのってのばっかりで…。
0348nobodyさん
2005/04/02(土) 14:40:29ID:BYWwUZK5つまり、プロキシ鯖は80、8080は大抵空いているものなのですか?
0349nobodyさん
2005/04/02(土) 14:46:46ID:BYWwUZK5…ルータで弾いてるはずなのに。やばいっすかね?
0350nobodyさん
2005/04/02(土) 15:58:19ID:???$host = 'www.2ch.net'; #IPとかホスト名
$port = 80; #ポート番号
$socket = IO::Socket::INET->new(PeerAddr => $host, PeerPort => $port, Proto => 'tcp');
if($socket){ print 'ポート空いてるお^^'; }
else{ print '空いてないお^^'; }
0352343
2005/04/02(土) 17:18:11ID:jF3LdyJOでも、初心者の僕には頭が混乱してくる話で…w
皆さんの御厚意を無駄にしないよう、ぐぐりまくって勉強します。
最後に、クレクレで申し訳ないんですが、良い勉強サイトあったら紹介して頂けますでしょうか。
皆さんのように教えられる立場になれるようがんばります。ありがとうございました。
0353nobodyさん
2005/04/02(土) 17:46:33ID:???0354343
2005/04/02(土) 19:10:20ID:jF3LdyJOところで、
sub checkProxyList
{
my $RADDR = $ENV{'REMOTE_ADDR'};
$RADDR =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
my $query_addr = "$4.$3.$2.$1.niku.2ch.net";
my $addr = join('.', unpack('C*', gethostbyname($query_addr)));
if ($addr eq '127.0.0.2')
{
DispError("ERROR!","公開PROXYからの投稿は受け付けていません!!(1)");
}
return 0;
}
って、勝手に使って良いんですか?
0355nobodyさん
2005/04/02(土) 21:39:07ID:???私的利用なら問題ないでしょ。多分。俺は詳しくないからわからんけど。
でも俺なら
my $req = join(".", reverse(split(/\./, $ADDR))) . ".niku.2ch.net";
my $res = join(".", unpack("C*", gethostbyname($req)));
DispError("ERROR!","公開PROXYからの投稿は受け付けていません!!(1)") if ($res eq '127.0.0.2');
とか、
if(join(".", unpack("C*", gethostbyname(join(".", reverse(split(/\./, $ADDR))) . ".niku.2ch.net"))) eq '127.0.0.2'){
DispError("ERROR!","公開PROXYからの投稿は受け付けていません!!(1)");
}
みたいに書くよ!
0356nobodyさん
2005/04/03(日) 00:25:49ID:???0357nobodyさん
2005/04/03(日) 01:52:06ID:???例えばサブルーチンcodeのリファレンスを作るとき
sub { &code('a','b') }とすると見栄え的にあまりよくないと思うので、
\&code('a','b') や \{&code('a','b')} としてみたらエラーとなりました。
何かうまい方法は無いのでしょうか。例えば次の単純なプログラムを実行したら
Not a CODE referenceと表示されます。
$ref = \&hoho(1,\&huhu('a','b'));
&$ref;
sub hoho {
&{$_[1]};
}
sub huhu {
print $_[0].$_[1];
}
0358nobodyさん
2005/04/03(日) 06:33:05ID:???そろそろオブジェクト指向にシフトする頃合かも。
あえてクロージャで書いてみる。
$ref = create_hoho(1, create_huhu('a', 'b'));
$ref->();
sub create_hoho {
my ($dummy_arg, $sub_ref) = @_;
return sub { $sub_ref->(); }
}
sub create_huhu {
my @args = @_;
return sub { print $args[0].$args[1]; }
}
0360nobodyさん
2005/04/03(日) 10:02:18ID:???# 処理
# のようなのは不可能なのですか?
# この中でディレクトリの内容を $_ に読み込んで処理したいのですが、
# 直前に処理されていた $_ の値が入ってしまいます。
}
よろしくお願いします。
0361nobodyさん
2005/04/03(日) 10:54:05ID:???}
0362nobodyさん
2005/04/03(日) 11:17:18ID:???}
0363343
2005/04/03(日) 12:13:17ID:2xmdAJbj豚クスです
0364360
2005/04/03(日) 17:40:14ID:???while(<FH>){
}
ならできるのにどうしてですか?
0365nobodyさん
2005/04/03(日) 19:23:25ID:???掲示板(2chではないです)に書き込みたいんですが、
何か参考になるサイトなどありましたらお教え願えないでしょうか。
該当掲示板のアドレスにパラメーターくっつけて送信したらいいだけってのはわかるんですが、
そこに至るまでの過程がわからなくて…。
何か良いサンプルプログラムとかありましたら何とぞよろしくお願いします。
0366nobodyさん
2005/04/03(日) 19:33:25ID:???while(<FH>) のときだけ特別にそう動くようになってるんだよ。
ちゃんとした本を読むのだ。書いてあるから。
0368nobodyさん
2005/04/03(日) 21:57:56ID:???http://homepage3.nifty.com/hippo2000/perltips/lwpcook.html#POST
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616
0369nobodyさん
2005/04/04(月) 17:27:56ID:soRFZIJA0370nobodyさん
2005/04/04(月) 20:50:32ID:???0371nobodyさん
2005/04/05(火) 13:02:19ID:ZNntFGGUフォーム内容A=フォーム内容B
でなければエラー
という簡単な方法があれば教えて頂けないでしょうか?
0372nobodyさん
2005/04/05(火) 13:37:44ID:???0373nobodyさん
2005/04/05(火) 13:52:34ID:???HTMLで擬似縮小するのではなく本当に画像を指定サイズに縮小する方法はありませんか
0374nobodyさん
2005/04/05(火) 13:58:23ID:???0376nobodyさん
2005/04/05(火) 14:13:05ID:CfOSbO/O育成?
0378nobodyさん
2005/04/05(火) 15:19:12ID:???出来ました。
ありがとうございました。
0381nobodyさん
2005/04/05(火) 16:21:48ID:ZNntFGGUPerlのフォームの入力確認の部分で
フォーム内容A=フォーム内容B
でなければエラー
という簡単な記述があれば教えて頂けないでしょうか?
0382nobodyさん
2005/04/05(火) 16:26:07ID:???0383nobodyさん
2005/04/05(火) 16:37:20ID:???%FORMにクエリーが入ってるとして
if($FORM{'formA'} ne $FORM{'formB'}){&error(エラールーチンとか);}
初歩的にも度が過ぎる・・・
0384nobodyさん
2005/04/05(火) 18:08:15ID:ZNntFGGUやっぱりうまくいきません。
フォーム1の名前:password1 タイプ:password
フォーム2の名前:password2 タイプ:password
if ($password{'password1'} ne $password{'password2'}) { &error('エラーです。'); }
他に何か加えないといけないでしょうか?
問題点があったら、よろしくお願いします。
0385nobodyさん
2005/04/05(火) 18:14:00ID:???0386nobodyさん
2005/04/05(火) 18:17:26ID:ZNntFGGUよろしくお願いします。
0388nobodyさん
2005/04/05(火) 18:27:50ID:ZNntFGGUどこがわるいんでしょうか?
0389nobodyさん
2005/04/05(火) 18:31:59ID:ZNntFGGUクエリーを入れる→7件
my $q; #クエリーを入れる
my $method; #メソッドを入れる
↑はクエリーですか?
0391nobodyさん
2005/04/05(火) 18:37:46ID:ZNntFGGUフォーム1の名前:password1 タイプ:password
フォーム2の名前:password2 タイプ:password
if ($password{'password1'} ne $password{'password2'}) { &error('エラーです。'); }
でやっても、上の入力は無視されて飛ばされてるみたいで、
一緒でなくてもそのまま送信されてしまいます。上級者の方、よろしくお願いします。
0392nobodyさん
2005/04/05(火) 18:39:32ID:ZNntFGGU要するにどこをどのように直せばよろしいのでしょうか?
0393nobodyさん
2005/04/05(火) 19:07:40ID:???>このように直せば動く、このように付け加えれば動く、
>という指摘がうれしいのですが・・・。
>初心者ではなく言語がわからない人です。
こいつWeb制作板でこんなこと書いとる
0394nobodyさん
2005/04/05(火) 19:28:53ID:ZNntFGGU$b=newpass2;
if (!$namecheck && $name eq '') { &error('名前を入力してね。',''); }
if ($a==$b eq '') { &error('パスワードエラーです。',''); }
このようにifがいろいろ並んでいるのですが、
それに1行加えてみましたが、見事にエラーになりました。
よろしくお願いします。
0395nobodyさん
2005/04/05(火) 19:33:04ID:???0396nobodyさん
2005/04/05(火) 19:59:42ID:ZNntFGGU$b="passward2";
if (!$namecheck && $name eq '') { &error('名前を入力してね。',''); }
if ($a ne $b) { &error('パスワードエラーです。',''); }
にしたら、「パスワードエラー」が表示されるようになりました。
しかし、A=BでもA=Bでなくても、エラーになってしまいます。
「パスワードエラー」までいくようになったので、あとはAとBの置き換えの問題だと思うのですが、
この記述は上の方に書いたのですが、フォーム上の
name="passward1"
を
$a="passward1"
と置き換えていいのでしょうか?
0397nobodyさん
2005/04/05(火) 20:25:29ID:???どうでもいいんだけどな。
0398nobodyさん
2005/04/05(火) 20:32:11ID:???sub get_form {
my %form;
seek(STDIN,0,0);
read(STDIN,$_,$ENV{'CONTENT_LENGTH'});
foreach(split(/&/)){
my($name, $value) = split(/=/);
$value =~ s/%([a-fA-F0-9]{2})/chr(hex($1))/eg;
$form{$name} = $value;
}
return %form;
}
0399nobodyさん
2005/04/05(火) 20:46:00ID:???0400nobodyさん
2005/04/05(火) 20:57:55ID:???0401nobodyさん
2005/04/05(火) 21:22:59ID:???> CGIフォームをデコードするには?
> 標準のモジュール、多分CGI.pmを使うとよいでしょう。あなたが手作業で行うことは多分ありません!
使い方はこの辺りとか。
ttp://www.futomi.com/lecture/form/cgi-pm.html
0402nobodyさん
2005/04/05(火) 21:57:40ID:ZNntFGGUmy %form;
seek(STDIN,0,0);
read(STDIN,$_,$ENV{'CONTENT_LENGTH'});
foreach(split(/&/)){
my($name, $value) = split(/=/);
$value =~ s/%([a-fA-F0-9]{2})/chr(hex($1))/eg;
$form{$name} = $value;
}
return %form;
}
をデコード処理というところに貼ってみましたが、だめでした。
いろいろありがとうございました。
0403nobodyさん
2005/04/05(火) 22:31:15ID:???http://bird.dip.jp/computing/zive.html
ここを参考にしてみたんですがうまくアップロード出来ません。一応アクセスは出来てるようですが…。
もしかしてperlでアップロードする時は該当ファイルのパスが変わるのかなと思ったり。
以下に「全ソース」を貼らせてもらいます…。
アップロードしたいファイルはC:\Perl\test.txtの位置、このスクリプトを置いてる位置はC:\(直下)にあります。
どなたかアドバイスよろしくお願いします…。
# アップロード用
use constant URI => 'http://hoge.net';
use strict;
use LWP::UserAgent;
# POST parameters
my @param = ('hoge=1',
'MAX_FILE_SIZE=500000',
'uploadfile=C:\Perl\test.txt');
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(POST => URI);
$req->content_type('application/x-www-form-urlencoded');
$req->content(join('&', @param));
my $res = $ua->request($req);
open(OUT, ">> ./hoge.txt");
binmode(OUT);
print OUT $res->as_string;
close(OUT);
exit 0;
結果はアップロード拒否用のページのソースが出力…。
0404nobodyさん
2005/04/05(火) 23:10:32ID:???http://hoge.net はアップローダじゃないようだが?
0405403
2005/04/05(火) 23:20:45ID:???一応、http://hoge.net/index.phpにしてみましたが駄目でした…。
0406nobodyさん
2005/04/05(火) 23:31:49ID:???http://hoge.net/index.php も存在しないようだが?
0407nobodyさん
2005/04/06(水) 07:29:51ID:???ファイルアップの場合のcontent-typeは普通multipart/formdata
CGI側でチェックしてないことが多いのでフォームパースはやってくれるかもしれないがPOSTの内容はmultipart/formdataの仕様に合わせないとだめ。
0408nobodyさん
2005/04/06(水) 08:36:24ID:???詳細はrfc2388
0409nobodyさん
2005/04/06(水) 18:15:00ID:cBYix7o3POST以外のデータ受け取りを拒否する方法ってありますか?
0410nobodyさん
2005/04/06(水) 18:26:17ID:???0411nobodyさん
2005/04/06(水) 18:54:05ID:cBYix7o30412nobodyさん
2005/04/06(水) 18:59:03ID:0ohpKdgApostgresql8.0
windowsXP
perl5.008
DBD::PgPP
の環境にて、perlからpostgresにデータインサートをおこなっているのですが、
DBIのトランザクションがなかなか理解できません。
使いかた、文法間違っていないかご教授お願いします。
$dbh= DBI->connect($DBname, $DBuser, $DBpass);
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
eval {
#テーブル1にinsert
$SQL= "INSERT 〜";
$sth= $dbh->prepare($SQL);
$sth ->execute();
#テーブル2にinsert
$SQL= "INSERT 〜";
$sth= $dbh->prepare($SQL);
$sth ->execute();
$dbh->commit;
};
if ($@) {
$dbh->rollback;
}
$sth->finish();
$dbh->disconnect();
0413nobodyさん
2005/04/06(水) 21:11:07ID:cBYix7o3掲示板を作っているのですが、reverseを使わずに、
ログファイルの先頭に書き加えるにはどうしたらいいでしょうか?
なるべくリソースを使わないようにしたいです。
また、意中のレスを削除するために、
ログファイルから、その行だけを取得する方法はありますでしょうか?
よろしくお願いします。
0414nobodyさん
2005/04/06(水) 21:41:05ID:???>>408
色々と探した結果ここのページ参考にして
修正してみたんですが、どうもうまく動きません…。
一応アップロード用のphpファイルと接続出来ているようですが、
やはりフォームデータが正常に送信出来てないようです。
とりあえずアップロード用のモードでサーバーのphpが結果を出力してるので、
全てのフォームデータが送信されてないわけではないと思うんですが。
うーん。
use HTTP::Request::Common;
use strict;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $res = $ua->request(POST 'http://yomogiwakakusa.jog.buttobi.net/index.php',
Content_Type => 'form-data',
Content => [ upload=> '1',
MAX_FILE_SIZE => '500000',
userfile => "test.txt" #アップロード用ファイル、plスクリプトと同階層
]);
print $res->as_string;
open(OUT, ">> ./result.txt");
binmode(OUT);
print OUT $res->as_string;
close(OUT);
exit 0;
0416nobodyさん
2005/04/06(水) 22:33:49ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_do_I_change_one_line_in_a_fi
>>414
use LWP::Debug qw(+);
0417nobodyさん
2005/04/06(水) 23:15:15ID:???>>416
ありがとうございます。
アップロード用のphpの方をいじってファイル名がどういう風に送信されてるか表示させてみました。
で、同じようにこのコードで実行してみると、
my $userfile='C:\test.txt';
my $res = $ua->request(POST 'http://hoge.net/index.php',
Content_Type => 'form-data',
Content => [ upload_log => '1',
MAX_FILE_SIZE => '500000',
userfile => $userfile
]);
php側じゃ$userfileの値が「C:\\test.txt」と円マーク二つ返してきてます…。
これじゃアップロード出来ないですよね。
一応こちらのperlの方を「C:\\test.txt」と変更して実行すると、
返り値は同じ「C:\\test.txt」、
ヤケクソになって「C:\\\test.txt」と円マーク三つつけて実行すると、
「C:\\\\test.txt」と四つになって返ってきます。
perlってこんな仕様だったかな…。
すいません、そろそろ大詰めっぽいのでどなたか良きアドバイスを…。
0418nobodyさん
2005/04/06(水) 23:20:19ID:jUkFe3D60419nobodyさん
2005/04/06(水) 23:26:41ID:???0421414
2005/04/06(水) 23:45:15ID:???ああ、そんな簡単なことでよかったのか…、
ということでやってみましたが確かにファイル名はそのまま送信できましたけど、
結局アップロードは出来ず。
なぜだ…。
とりあえず>>416さんに教えてもらったコードでデバグしてみるとこんな感じでした。
LWP::UserAgent::new: ()
LWP::UserAgent::request: ()
LWP::UserAgent::send_request: POST http://hoge.net/index.php
LWP::UserAgent::_need_proxy: Not proxied
LWP::Protocol::http::request: ()
LWP::Protocol::collect: read 860 bytes
LWP::Protocol::collect: read 1852 bytes
LWP::UserAgent::request: Simple response: OK
0422nobodyさん
2005/04/06(水) 23:49:36ID:???えと、ご存じかも知れませんがphpじゃアップロードされたファイルはこんな↓感じの形式で
サイズとかいろいろなデータを取得できるんですが、
$_FILES['userfile']['name']
$_FILES['userfile']['tmp_name']
中身がからっぽなのでとりあえず
$userfile= $_REQUEST['userfile'];
とただの変数扱い?にしてperlから送信されてくるファイル名を調べてみたんです。
0423414
2005/04/07(木) 00:14:05ID:???http://homepage3.nifty.com/hippo2000/perltips/HTTP/Request/Common.html
> これはおおむね以下のようなHTTP::Requestオブジェクトを作成します
> (バウンダリと~/.profileは違っていることでしょう):
ここがちょっと意味がわからない…。
0424nobodyさん
2005/04/07(木) 01:10:34ID:???普通、テーブル2へのinsertでエラーが発生したらrollbackさせる。
>>414
|Content-Type: multipart/form-data; boundary="6G+f"
や
| PATH=/local/perl/bin:$PATH
| export PATH
はそのとおりではないだろうという事。
0425nobodyさん
2005/04/07(木) 01:32:34ID:hZmAmpQN$, = '+'とした後、keys(%expect)をダブルクォートの中で配列として評価し展開したいんです。。
色々と試してみたのですが、結局やり方が分からなかったのでどなたか教えて頂けると嬉しいです。
0427414
2005/04/07(木) 01:42:28ID:???ああ、そういうことですか、なるほど…。
ひとつ気になった点。
普通にブラウザのフォームから「アップロードファイルの参照は空欄のままにして」submitした場合、
送信しようとしたアップロードファイルのデータをphpの側が
[userfile] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)
と出力するんですが、
ローカルのperlからデータ送信した場合なぜか
Array
(
)
と、根本的に何もかも空っぽになってしまいます。
これは何か怪しい…かな。
0428nobodyさん
2005/04/07(木) 01:43:18ID:???すいません。。返信ありがとうございます。
%expectにはいくつかのデータが入っていて、そのキーだけを取り出し+で繋げて$outに代入したいんです。
なので、
$, = '+';
my @tmp = keys(%expect);
$out = "@tmp";
とすれば出来るんですが、わざわざ@tmpを作るのが汚いので@tmpを作らずにこれが出来る方法を質問させて頂いた次第です。
0429nobodyさん
2005/04/07(木) 02:12:32ID:mpm+fGDU0431nobodyさん
2005/04/07(木) 02:29:36ID:???0432nobodyさん
2005/04/07(木) 02:30:05ID:???特殊変数 $, と $" を勘違いしている。
my %hash = (foo => 2, bar => 3, baz => 4);
{ local $, = '+'; print 1, sort(values %hash), 5, "\n" }
{ local $" = '+'; print "1+@{[ sort values %hash ]}+5" }
0433428
2005/04/07(木) 02:35:39ID:???思いっきり勘違いしてました。。$"ですね。ご指摘ありがとうございます。>>429さんすみません。
>>431
なるほどー。全然思いつきませんでした。。それでいきたいと思います。ありがとうございました。
0434nobodyさん
2005/04/07(木) 12:06:08ID:2qkaRxVD先輩に怒鳴られました。何が悪かったのでしょう?
0435nobodyさん
2005/04/07(木) 12:12:29ID:dowco4wM「スカタン」と聞き間違えたんじゃないかな。
0436nobodyさん
2005/04/07(木) 12:14:18ID:???スカラーコンテスト -> スカラーコンテキスト
0437nobodyさん
2005/04/07(木) 12:27:59ID:2qkaRxVDなるほど!って、それはないですよ。うち関西じゃなし
>>436
あ、スカラーコンテキストです。へへ
0438nobodyさん
2005/04/07(木) 13:32:24ID:???共通の認識の無い略語を使われると意味が通じないということでしょう。
スカコンは一般的に使われている略語とは思えない
0439nobodyさん
2005/04/08(金) 00:23:01ID:???hoge.pl
lib
└----hoge.pm
hoge
└----test.pm
という構造で、test.pmのsub{ }の中から
hoge.plの中のグローバル変数の値を取得するにはどういうコードを書けばいいんでしょうか。
よろしくお願いします。
0440nobodyさん
2005/04/08(金) 00:35:08ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlmod.html
但し普通そんな行儀の悪い受け渡し方はしない。
0441nobodyさん
2005/04/08(金) 00:47:06ID:???ありがとうございます。
ついでにもう一つ行儀の悪いことかと思うのですが、
同じくtest.pmの中にあるサブメソッドから、
hoge.plの中で定義してあるサブメソッドを呼び出すにはどうしたらよいのでしょうか。
実はお教え頂いたページはgoogle検索で見ていたのですが、
自分ではまだ不勉強な部分が多くほとんど要領を得ませんでした、無念。
よろしければ、簡単なコードを示して頂ければ嬉しいです。
横着を言ってすいません。
0442nobodyさん
2005/04/08(金) 02:47:20ID:???やっとわかりました。
しかし、ネストされたモジュールの中のサブルーティンからメインに置いてある
サブルーティンを呼ぶ方法が未だにわかりません。
どなたかよろしくお願いします。
0445nobodyさん
2005/04/08(金) 12:10:49ID:???スカラー変数のプレフィクスは $
配列のプレフィクスは @
ハッシュのプレフィクスは %
サブルーチンのプレフィクスは &
型グロブのプレフィクスは *
print map "$_ => [$main::{$_}]\n", sort keys %main::;
0446nobodyさん
2005/04/08(金) 15:30:24ID:???できました!ありがとうございます
0447nobodyさん
2005/04/08(金) 20:51:39ID:RsQcEeNJ読みましたが、同じくタブ文字(\t)も含まれていないのでしょうか?
日本語のデータをeuc-jpで保存していて、そのフィールドの区切りを
タブ文字にしているので、これで絶対に大丈夫なのか、不安に
思いました。
0448nobodyさん
2005/04/08(金) 20:55:43ID:j5c3p0G/最近のperlではinet_aton()の仕様が変わったのでしょうか?
nslookupが複数のIPアドレスを返すホストを引数に与えると
inet_aton()が失敗します。最初のIPアドレスを返すのが仕様だと
思ったのですが。バージョンは以下のとおりです。
perl --version
This is perl, v5.8.2 built for sun4-solaris
0449nobodyさん
2005/04/08(金) 21:02:13ID:???http://www.din.or.jp/~ohzaki/perl.htm#Character
0450nobodyさん
2005/04/08(金) 22:02:13ID:???何に対して「最近」か知らんけど、OS 側のライブラリにも依るんじゃないの。
http://search.cpan.org/src/NWCLARK/perl-5.8.2/ext/Socket/Socket.xs
http://search.cpan.org/src/NWCLARK/perl-5.8.6/ext/Socket/Socket.xs
http://search.cpan.org/~nwclark/perl-5.8.6/pod/perlhist.pod
0451448
2005/04/08(金) 22:56:06ID:???ありがとうございます。
OSのライブラリgethostbyname()に依存している可能性が
あるわけですね。
CGIを書いているのですが、CGIに関しては質問を受け付けないと
言っているISPなので困ったなあ。
0452nobodyさん
2005/04/08(金) 23:08:49ID:OhDnlIyMopendir(DIR, "./$folder");
@dir = readdir(DIR);
closedir(DIR);
for($i=0;$dir[$i];$i++){
$ts = ($dir[$i] =~ /^\d+\.html/) ?
(stat("./$folder/$dir[$i]"))[9] - 800000000 : ' ';
$dir[$i] = "$ts,$dir[$i]";
}
@dir = sort {$b cmp $a;} @dir;
これってopendir(DIR, "ls-t./$folder");
で済むと言われたのですが
UNIXでのOS環境でのことですよね?
コーディングでOSのコマンドを利用するようなやり方は
あまりよく知らないもので。
0453nobodyさん
2005/04/08(金) 23:31:30ID:???0454nobodyさん
2005/04/08(金) 23:44:12ID:OhDnlIyMなんか疑問に感じた。
ディレクトリのなかのファイルを新しい日付順に降順で並び換える
プログラムなのですが、、、
そもそもlsって表示コマンドだし、-tオプションは昇順表示だし。
OSのコマンドを使うにしても並び換えのコマンドだと
思うのだが。
よくわからんが負荷が高いからこのほうがいい、と言われた。
0455nobodyさん
2005/04/08(金) 23:54:12ID:OhDnlIyMじゃなかった。
opendir(DIR, "ls-t./$folder|");
だった。
そもそもこの場合の|の意味がわからんのですが、、、
0456nobodyさん
2005/04/09(土) 00:11:56ID:gYWC+2uysort -rだと思うのだが、、、
0457nobodyさん
2005/04/09(土) 00:34:17ID:gYWC+2uyそれなら並び換えはいらんのだが
しかしlsコマンドでいいのかわからん。
0458nobodyさん
2005/04/09(土) 00:52:37ID:???ls -t の出力をパイプで自分に流し込む話
0459nobodyさん
2005/04/09(土) 00:58:37ID:gYWC+2uy加工させるスクリプトに持っていくのかな。
しかし初心者ながらこういうやり方まで頭がいかんかった。
つまりファイル操作ならOSのコマンドで代用すればいいじゃない。
ということが。
0460nobodyさん
2005/04/09(土) 01:07:49ID:gYWC+2uy@dir = readdir(DIR);
closedir(DIR);
for($i=0;$dir[$i];$i++){
#$ts = ($dir[$i] =~ /^\d+\.html/) ?
(stat("./$folder/$dir[$i]"))[9] - 800000000 : ' ';
$dir[$i] = "$ts,$dir[$i]";
}
@dir = sort {$b cmp $a;} @dir;
for($i=$next - 21;$i < $next+100-21 && $dir[$i];$i++){
($ts, $file) = split(/,/, $dir[$i]);
last if $ts eq ' ';
open(R, "./$folder/$file");
$_ = <R>;
close(R);
/<b>([^\<]*)<\/b>/;
$j = $i+1;
print W " $j<a href=\"$file\">$1</a>\n";
}
こういう構造でのスクリプトは古いのだろうか。
open(DIR, "ls -t ./$folder |") で
やればあきらかに負荷軽減になるのだろうか。
0461nobodyさん
2005/04/09(土) 01:13:06ID:???0462nobodyさん
2005/04/09(土) 01:34:53ID:gYWC+2uyopen(DIR, "dir -d ./$folder|");
ということになるのだろうか?
そもそもソースにOSコマンド書いたからといって
OSがどう連動してくれてるか
わからないのだが。
0463nobodyさん
2005/04/09(土) 01:53:22ID:gYWC+2uy0464nobodyさん
2005/04/09(土) 02:38:31ID:???OSコマンドって言ってる時点で(ry
まずは自分が何を知りたいのか整理しろ。
そして質問は分かりやすく謙虚に書け。
0465nobodyさん
2005/04/09(土) 02:45:27ID:gYWC+2uy謙虚もクソもあるか。
てめえの言い方も横柄だろうが。
わからねえならそれでいいんだよ。
クソが。
0466nobodyさん
2005/04/09(土) 02:56:29ID:???0467nobodyさん
2005/04/09(土) 03:02:18ID:???パイプを open するとプロセスが別に生成されて
場合によっては shell まで呼び出されたりして
かえって負荷が高くなる場合も多いと思う
まあ結局はケースバイケースだが
0468nobodyさん
2005/04/09(土) 03:35:06ID:???ちょこちょこI/O負荷をかけるよりは。
0469nobodyさん
2005/04/09(土) 06:49:56ID:???fork自体のコストが高いから、CGIには向かないかも。
windowsなら、これ入れておけばそこそこunix環境に近くなる。
http://unxutils.sourceforge.net/
0470nobodyさん
2005/04/09(土) 11:44:26ID:???どうすればいいんですか?
0471nobodyさん
2005/04/09(土) 12:16:31ID:???0472nobodyさん
2005/04/09(土) 12:46:24ID:???0473nobodyさん
2005/04/09(土) 13:04:45ID:???感謝!助かりました!
0476nobodyさん
2005/04/09(土) 13:38:10ID:???0477nobodyさん
2005/04/09(土) 13:41:18ID:???0478nobodyさん
2005/04/09(土) 14:26:27ID:???0479nobodyさん
2005/04/09(土) 14:39:34ID:???0482nobodyさん
2005/04/10(日) 00:14:51ID:???0483nobodyさん
2005/04/10(日) 00:30:04ID:???0484nobodyさん
2005/04/10(日) 01:41:29ID:???$ cat omaera_aho.pl
print 'すべての素数'
$ perl omaera_aho.pl
すべての素数
0485nobodyさん
2005/04/10(日) 02:41:51ID:???二回 read したいんだけど、seek(STDIN, 0, 0) しても先頭に戻らなかった・・・。
一回グローバルな変数に置いておくとか、ファイルに書き出すとかしかないんかな?
うーむ。
0486nobodyさん
2005/04/10(日) 03:20:01ID:???0487nobodyさん
2005/04/10(日) 10:33:46ID:???速くなりますか?あるいは速くする書き方はありますか?
0488nobodyさん
2005/04/10(日) 16:56:27ID:???http://www.oreilly.co.jp/books/4873110971/toc.html
24章を読め。
0489nobodyさん
2005/04/10(日) 17:58:57ID:???~s/\$se/ selected="selected"/i;
だとうまく行きません。どうすればいいでしょうか。
0490nobodyさん
2005/04/10(日) 19:16:45ID:???$buf =~ s/\$sel/selected="selected"/i;
print $buf;
ふつーに出来たけど
0491nobodyさん
2005/04/10(日) 19:54:56ID:???↑
0492nobodyさん
2005/04/10(日) 20:04:56ID:???0493nobodyさん
2005/04/11(月) 08:27:59ID:???↑
この頭の~は何のためにつけてるのだろうか?
0495nobodyさん
2005/04/11(月) 13:30:35ID:???0496nobodyさん
2005/04/11(月) 15:06:37ID:???0497nobodyさん
2005/04/11(月) 17:22:12ID:???0498nobodyさん
2005/04/11(月) 18:48:58ID:???0499nobodyさん
2005/04/12(火) 03:03:59ID:qneeBtxS例えば↓なら結果として 3 が欲しいのです。
$str = 'a<br>bb<br>cccccc<br>dd';
現在は、配列を経由させてなんとか取得しています。
$str = 'a<br>bb<br>cccccc<br>dd';
$result = @dummy = $str =~ m/<br>/g;
print $result;
0500nobodyさん
2005/04/12(火) 03:25:15ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_count_the_number_of_oc
$result++ while $str =~ /<br>/g;
$result++ while ($pos = index $str, '<br>', $pos)++ > -1;
$result = @{[ $str =~ /<br>/g ]};
$result = $#{[ split /<br>/, $str ]};
0501499
2005/04/12(火) 09:03:28ID:???1行目の方法でいきたいと思います。
ありがとうございました。
0502nobodyさん
2005/04/12(火) 22:17:46ID:jd+szO9r↑の部分に直接サブルーチンを書いて判定させたいのですが、どのようにすればいいですか?
if (&{foreach (keys(%{$CONFIG{'add'}})) { return 1 if $data[$_][0] == $_; } return 0;})
こんな風に書いてみたのですが、returnで返したのが不味かったらしく、エラーが出てしまいました。
どのように書けば良いのか知っている方ご教授して頂けると嬉しいです。
0503nobodyさん
2005/04/12(火) 22:56:01ID:???エラーが出たならエラーメッセージを読めばいいじゃない。
「Can't return *outside* a subroutine」と答は出てるだろ?
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlref.html
0505nobodyさん
2005/04/13(水) 16:47:52ID:3dbRXjnXPerlにはJavaのようなboolean型のような変数宣言はできないのでしょうか。
数値以外は文字列として扱う必要があるのでしょうか。
$isErr = false;
if ($isError) {
print "Error";
} else {
print "Not Error";
}
こう書くと実行はできるのですが、-cwで文字列をどうにかしろとのエラーが出てしまいます。
0506nobodyさん
2005/04/13(水) 16:49:26ID:???修正しても、結果は変わらないのですが・・・
0507nobodyさん
2005/04/13(水) 17:04:28ID:???sub false () {0}
print("True\n") if true;
print("False\n") unless false;
0508nobodyさん
2005/04/13(水) 21:30:45ID:mF6hKb8mこれを
No.000001 あいうえお
No.000002 かきくけこ
No.000003 さしすせそ
No.000004 たちつてと
みたいにやるのってどうやるの?
単純に No.[000000-999999] の前に改行入れたらマ白になたヨ
0509nobodyさん
2005/04/13(水) 21:38:08ID:???0510nobodyさん
2005/04/14(木) 03:04:17ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldata.html
Perl では undef か空文字列か 0 が偽、その他は真。false と
いう名の演算子もリテラルも存在しないので、サブルーチン
false を定義していない限り $isErr = false; の false は
bare word (裸の単語) と解釈され、$isErr = 'false'; と同義。
-w オプションは bare word を見つけると警告を出す。
>>508
>>1
0511nobodyさん
2005/04/14(木) 11:37:45ID:us4u4fSx「サーバーを再起動せずに新しいモジュールをインストールする方法は後述する」
と書かれているのですが、何処に書かれているか、わかりませんorz
どなたかわかりませんでしょうか。
まさかApache::Registryの事じゃないですよね・・・
スレ違いかもしれませんが、お願いします。もしくは誘導先でも。
0512nobodyさん
2005/04/14(木) 12:21:12ID:???なんだかメルヘンな話やね
0513nobodyさん
2005/04/14(木) 13:48:31ID:???Registryの事なんでしょうかね。
DSOみたいな薄いラッパーになるハンドラ書けば動くかなぁ。
他にRegistoryの動作を大幅に簡略化するオプションでもあればいいのですが。
ちょっとズレますが、ModPerl::RegistryBBって使ってる方居られます?
これ使う為に、Registory以上に気をつけることとかあるのでしょうか。
0514nobodyさん
2005/04/14(木) 14:41:46ID:???新しいモジュールをインストールってことは、Apache::StatINC では無いよね?
そもそもインストールだけなら再起動なんていらないけど、
再起動せずにハンドラに加えたいってことかな?
Apache->push_handlers するハンドラを Apache::StatINC で見張ってれば
出来そうな気もする。試したこと無いけど。
0515nobodyさん
2005/04/14(木) 16:03:05ID:us4u4fSxはいそうです、言葉足らずでしたorz
>Apache->push_handlers するハンドラを Apache::StatINC で見張
なるほど、その方法で出来そうな気が・・・(汗)
けどmod_perlの機能でお手軽に。。ってわけにはいきませんね_| ̄|○
0516nobodyさん
2005/04/15(金) 04:54:49ID:???文字コードがjisなので、以下のようにしましたが、"put search word: "
の部分が画面に表示されません。
use Encode;
use encoding "jis";
print "put search word: ";
chomp($word = <STDIN>);
$word = decode('jis', $word);
while(<>) {
$line = decode('jis', $_);
if ($line =~ /$word/) {
print "$ARGV\n";
}
}
どうしたらよいでしょうか。また、画面表示の部分に日本語を使うことは
できるでしょうか。当方、windows上でcygwinを使用、rxvtの端末文字コードは
sjisにしてあります。
0517nobodyさん
2005/04/15(金) 06:28:27ID:ftMFD1Fr"世田谷(セタガヤ)"
"北海道(ホッカイドウ)"
"宗谷岬(ソウヤミサキ)"
といった文字列それぞれから、「地名」と「よみ」を抽出したいと考えています。
そこで、以下のようにやってみたのですが、
($chimei,$yomi) = $str =~ /([^(]+)((.+)/;
そうすると、
"宗谷岬(ソウヤミサキ)"の場合だけ、
$chimei -> 谷岬
$yomi -> ソウヤミサキ
となってしまいます。
文字コードはeuc-jpで処理しており、「宗」の2バイト目と「(」の1バイト目が
同じために、意図しているようにマッチしないということまではわかったのですが、
どのような正規表現を使えばよいかがわかりません。
こういった場合、どのように処理すればよいのでしょうか。
ちなみに、文字コードは以下のとおりです。
宗→\xBD\xA1(->\xA1\xCA
よろしくお願いします。
0518nobodyさん
2005/04/15(金) 07:31:33ID:???こちらの環境では表示されるので分からんが、出力バッファ絡みなら
print する前に $| = 1; か、print 後に更に print "";
> 画面表示の部分に日本語を使うことはできるでしょうか。
ターミナルが表示できる文字コードで出力すればいいんじゃない。
http://www.kt.rim.or.jp/~kbk/perl-5.8/encoding.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
>>517
http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
0519nobodyさん
2005/04/15(金) 08:21:34ID:ierbYSVR以下のようにして解決いたしました。
#!/usr/local/bin/perl
$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
@str = qw(東京(トウキョウ) 世田谷(セタガヤ) 北海道(ホッカイドウ) 宗谷岬(ソウヤミサキ));
foreach $str (@str){
(@m) = $str =~ /^((?:$ascii|$twoBytes|$threeBytes)*?)(((?:$ascii|$twoBytes|$threeBytes)+))/;
print "$str ->".join(",",@m)."\n";
}
0521質問
2005/04/15(金) 16:33:41ID:jvrJ4EBi例えば
<BR>市町村 <BR>
<SELECT
name=pref>
<OPTION value="" selected>---お選びください---</OPTION>
<OPTION
value=川越>川越</OPTION>
<OPTION value=さいたま>さいたま</OPTION>
<OPTION
value=秩父>秩父</OPTION>
<OPTION value=熊谷>熊谷</OPTION>
</SELECT>
上のようなHTML文書を
スクリプトによって
<BR>市町村 <BR>
<SELECT name=pref>
<OPTION value="" selected>---お選びください---</OPTION>
<OPTION value=川越>川越</OPTION>
<OPTION value=さいたま>さいたま</OPTION>
<OPTION value=秩父>秩父</OPTION>
<OPTION value=熊谷>熊谷</OPTION>
</SELECT>
のように並び替えるにはどうしたらよいでしょうか?
ちなみに
$html = s/((?:\G|>)[^<]*?)\n/$1/g;
のように書いたのですがうまくいきませんでした。
0522nobodyさん
2005/04/15(金) 16:38:59ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perltrap.html#Perl_Traps
0523nobodyさん
2005/04/15(金) 18:14:48ID:???0524質問
2005/04/15(金) 18:52:11ID:jvrJ4EBiありがとうございました。ちょっと難しすぎて分かりませんでした・・・orz
再び正規表現ですいません。
<市部:さいたま>
<郡部:吉見>
<市部:秩父>
<市部:川越>
↓上のデータを
<市部:さいたま市>
<郡部:吉見>
<市部:秩父市>
<市部:川越市>
のように先頭から「<市部:●●>」とマッチングするものを、
「<市部:●●市>」に置き換えるにはどうしたらよいでしょうか
(ただし、「●●」は流動的なものとする)
$data =~ s/<[市部:]*>/<市部:$_市>/;
上のようにやったところ、$_に何も値が入りません。
0525nobodyさん
2005/04/15(金) 18:53:41ID:???正規表現道場@2ch Part4
http://pc8.2ch.net/test/read.cgi/php/1105930285/
0526nobodyさん
2005/04/16(土) 01:58:57ID:zFFmYmjwで、確認画面で
パスワードを表示されないようにしたい(現在は表示される)んですけど、
やり方、わかり方、教えてください。
よろしくお願いします。
0528nobodyさん
2005/04/16(土) 02:09:25ID:zFFmYmjwフォーム画面では表示されないのですが、確認画面では表示されてしまいます。
それを隠す方法はあるのでしょうか?
0530516
2005/04/16(土) 18:09:31ID:???いろいろやったら、結局、入力および出力はそれぞれ同じに
しておかなければだめだということが分かりました。つまり、
<STDIN>からの入力とwhile(<>)で読み込む入力が異なって
いたのでだめだったようです。そこで、以下のようにしたら
OKでした。
----------
use Encode;
use encoding 'shift-jis', STDIN=>'shift-jis', STDOUT=>'shift-jis';
$| = 1;
print "input a search word: ";
# print "";
chomp($search = <STDIN>);
print "$search\n";
# $word = encode('jis', $search);
while(<>) {
$line = decode('jis', $_);
if ($line =~ /$search/) {
print "$ARGV\n";
}
}
--------
ご報告まで。
0531nobodyさん
2005/04/16(土) 23:26:54ID:???質問は下記にあるものなのですが、なにとぞ教えてください。
PerlでCGIなのですが、
例えば十個の$a1,$a2…$a10があり、
ここに10をランダムに格納していきたいのです。
…うまく説明できない…
例えば、
一回目は $a1=2,$a2=3,…$a10=1 でトータルで10
二回目は $a1=4,$a2=1,…$a10=2 でトータルで10
これを十回繰り返す。
という具合です。
判り難くて申し訳ないのですが、
なにとぞご教授下さいませ。
0532nobodyさん
2005/04/16(土) 23:41:29ID:???0533nobodyさん
2005/04/16(土) 23:44:21ID:???0534nobodyさん
2005/04/16(土) 23:46:51ID:???0535nobodyさん
2005/04/16(土) 23:48:26ID:???0536nobodyさん
2005/04/16(土) 23:58:37ID:kx2lH57mfor($i=0;$i<=10;$i++){
?????????????????
}
↑
この?部分で$1~$10に限られた数値をランダムで入れていきたいのですが、
その処理の仕方がわからないのです。
0537nobodyさん
2005/04/17(日) 00:01:52ID:???0538nobodyさん
2005/04/17(日) 00:22:26ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_do_I_shuffle_an_array_random
http://boobar.hp.infoseek.co.jp/bench/randlist.txt
sub rand_num {
my @num = @_;
for (my $i = @num; --$i;) {
my $j = int rand($i + 1);
$j == $i && next;
@num[$i, $j] = @num[$j, $i];
}
@num;
}
for (1..10) {
print "$_ - ";
my($a1, $a2, $a3, $a4, $a5, $a6, $a7, $a8, $a9, $a10) = rand_num(1..10);
print join '/', $a1, $a2, $a3, $a4, $a5, $a6, $a7, $a8, $a9, $a10;
print "\n";
}
0539nobodyさん
2005/04/17(日) 13:12:59ID:???その上で、やりたい事がイマイチよく分からん。
10個の数の満たすべき条件は何?
10個の合計が10になる事?
それとも、ひとつひとつの数が0以上10以下の範囲ならいいの?
0540nobodyさん
2005/04/17(日) 14:33:17ID:???前々から気になってたんですが、
その perlfaq に載ってる方法のランダム性ってどうなんですかね?
例えば 1,2,3,4,5,6,7,8,9,10 と綺麗に並んだのができる確率って
splice 使う方法だと 1/10! になりますが
速い方のだと明らかにこれより大きくなりますよね?
0541nobodyさん
2005/04/17(日) 16:08:52ID:???0542nobodyさん
2005/04/17(日) 16:17:38ID:???プログラミングの為の数学と算数 vol.2
http://pc8.2ch.net/test/read.cgi/tech/1094368921/
0543T女の竹田
2005/04/17(日) 16:21:33ID:???こんなのはどうかな?
@hash{1..10} = ();
@array = ();
for (1..10) {
$array[$_] = (keys %hash)[int(rand(11-$_))];
delete $hash{$array[$_]};
}
0544T女の竹田
2005/04/17(日) 16:27:32ID:???spliceの方がいいし。忘れてください。
0545nobodyさん
2005/04/17(日) 19:06:27ID:???シャッフル?
List::Utilが使えるのなら、List::Utilのshuffleで。
use List::Util qw(shuffle);
for(1..10){
my @a = shuffle(1..10);
print "@a";
}
0546nobodyさん
2005/04/18(月) 17:36:57ID:uIr0c1v3ActivePerl-5.8.4.810-MSWin32-x86.msi
OS:XpSp2
を使っています。
$pack = pack("C*", 0x7E, 0x00, 0xFE, 0x40, 0x52, 0x00);
とすれば普通にパックしてくれるのですが
$pack = "0x7E, 0x00, 0xFE, 0x40, 0x52, 0x00";
$pack = pack("C*", $pack);
とした場合、パックしてくれません。
@pack = (0x7E, 0x00, 0xFE, 0x40, 0x52, 0x00);
$pack = pack("C*", @pack);
としてみた場合も同じです。
0x7Eみたいなデータを変数にいれてpackするには
どうしたらよいのでしょうか?
アドバイスいただけるとありがたいです。
0547ero 141-190-213.biwa.ne.jp/
2005/04/18(月) 18:39:47ID:???ぇ ハ っ
け
る ァ w おk w
は w w
0548nobodyさん
2005/04/18(月) 18:48:21ID:???あとの方でいけると思うが。一応試してみたが大丈夫だぞ?
% perl -e 'print pack("C*", 0x7e,0x00,0xfe,0x40,0x52,0x00)' | hex
0x00000000: 7e 00 fe 40 52 00 - ~@.@R@
% perl -e '@pack=(0x7e,0x00,0xfe,0x40,0x52,0x00); print pack "C*", @pack' | hex
0x00000000: 7e 00 fe 40 52 00 - ~@.@R@
0549nobodyさん
2005/04/18(月) 19:20:44ID:???の-Mの意味が分かりません。
ググってもわかりませんでした。
よろしくお願いします。
0551nobodyさん
2005/04/18(月) 19:34:36ID:???例えば、
perl -MJcode hoge.pl
とかすると、hoge.plでJcodeをuse宣言してなくてもJcodeモジュールが使える。
まあ、使いたかったら普通にスクリプト内でuse書いておけばいいわけだし、普通の人間には不要。
0552549
2005/04/18(月) 19:40:25ID:???0553nobodyさん
2005/04/18(月) 19:58:14ID:???perl -MJcode -e "print $Jcode::VERSION"
のようなワンライナーは普通の人間にも有用だと思うがな。
利用できるモジュールのヴァージョンをコマンドラインで調べるのは
「普通の人間」のする事ではないと言われればそれまでだがな。(w
0554546
2005/04/18(月) 20:16:51ID:???sub getPack {
my @pack;
my @hex1,@hex2;
my $hex1,$hex2;
open READ, '< C:\hex.txt';
foreach (<READ>) {
chomp;
if (/^#/ || $_ =~ /^\n/ || $_ =~ /^\r/) {
next;
}
push @packet,$_;
}
close READ;
for($i=0;$i < @pack;$i++){
($hex1,$hex2) = split /,/, $pack[$i];
push @{$packed{'hex1'}},pack "C*", packHex($hex1);
push @{$packed{'hex2'}},pack "C*", packHex($hex2);
}
#↓はとりあえず変換できているか確認するために表示させています。
#pack後はバイナリのため直接表示させて確認することができないので
#packされたデータを元のhexデータに変換しています。
#ちゃんと可逆変換ができればきちんと動作しているという確認がとれると考えました。
print"確認 - Hex:".getHex($packed{'hex2'}[0])."\n";
print"確認 - Pack:$packed{'hex2'}[0]\n";
}
0555546
2005/04/18(月) 20:17:27ID:???my $hex = shift;
my @hex;
@hex = split / /, $hex;
@hex = map { "0x".$_ } @hex;
return @hex;
}
sub getHex {
my $data = shift;
my $i;
my $return;
for ($i = 0; $i < length($data); $i++) {
$return .= uc(unpack("H2",substr($data, $i, 1)));
if ($i + 1 < length($data)) {
$return .= " ";
}
}
return $return;
}
sleep(999999);
0556546
2005/04/18(月) 20:17:53ID:???00 00 00 00 FF FF 01 00 02 00 00 00,C8 FB 6A 0A
こんな感じです。
連書き失礼します。
情報を小出しにするつもりはなかったのですがあまり長々と書いてもいけないと
思って簡略に書いてしまいました。
このようなコードを書いたのですがどうしても
push @{$packed{'hex1'}},pack "C*", packHex($hex1);
この時点でうまくpackしてくれません。
私もpackできるものだと思っていただけに原因がわかりません。
重ねてアドバイスお願いできますでしょうか。
0557nobodyさん
2005/04/18(月) 21:18:35ID:???> my @hex1,@hex2;
my(@hex1), @hex2; と解釈されるが、それは意図通りか?
> push @packet, $_;
@pack ではなく?
#!/usr/local/bin/perl -w
use strict;
sub packHex { map pack('H2', $_), map split(/ /), @_ }
sub getHex { join ' ', map uc unpack('H2', $_), @_ }
my(@hex1, @hex2);
while (<DATA>) {
next if /^[\n\r#]/;
chomp;
my($hex1, $hex2) = split /,/;
push @hex1, packHex($hex1);
push @hex2, packHex($hex2);
}
print getHex(@hex1), "\n";
print getHex(@hex2), "\n";
__DATA__
00 00 00 00 FF FF 01 00 02 00 00 00,C8 FB 6A 0A
0558546
2005/04/18(月) 22:33:33ID:???レスありがとうございます。
ご指摘のとおり2箇所間違っていました。
更にはアドバイスどころかこんなコンパクトなコードまで
書いていただいいてありがとうございます。
あともうひとつだけできないことがありまして
print getHex(@hex1), "\n";
をした場合に"C8 FB 6A 0A"このように表示されるようにしたいのですが
(つまりバイナリデータを配列の1要素として格納したい)
557さんのコードを元に
$i=0;
while (<DATA>) {
next if /^[\n\r#]/;
chomp;
my($hex1, $hex2) = split /,/;
$hex1[$i] = packHex($hex1);
$hex2[$i] = packHex($hex2);
$i++;
}
close DATA;
#ためしに一行目のデータだけを表示
print getHex($hex1[0]), "\n";
print getHex($hex2[0]), "\n";
このようにしてみましたがうまくいきません・・・
0559nobodyさん
2005/04/18(月) 22:39:16ID:???とりあえず文字列"0x10"は数値として解釈されると0x10(=16)では
なくて0になるってことに気をつけるべきだな。
0560nobodyさん
2005/04/19(火) 00:10:27ID:???>>1
> 3: こんなエラーが出て上手く行かなかった。
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_join_EXPR_LIST
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_map_BLOCK_LIST
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_pack_TEMPLATE_LIST
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_push_ARRAY_LIST
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_split__PATTERN__EXPR_LIMIT
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_unpack_TEMPLATE_EXPR
http://perldoc.jp/docs/perl/5.8.1/strict.pod
sub packHex { join '', map pack('H2', $_), split / /, pop }
sub getHex { join ' ', map uc unpack('H2', $_), split //, pop }
sub packHex { my @chr = split / /, pop; pack 'H2' x @chr, @chr }
sub packHex { local $_ = pop; s/\s+//g; pack 'H*', $_ }
0561546
2005/04/19(火) 11:21:09ID:???たびたびありがとうございます。
すいませんでした。
テンプレの基本がなってませんでした。
各関数の詳細解説までつけていただいてありがとうございます。
perldocというのがあるのですね。
これは凄くありがたいです。
packHexにもいろいろなやり方があっておもしろいです。
これから少しずつ噛み砕いて見ていこうとおもいます。
かなりお世話していただいて本当にありがとうございました。
0562質
2005/04/19(火) 12:56:26ID:xzzJhUPg「ECU-JP」で保存されるようにするにはどのようにすればよいのでしょうか?
0564質
2005/04/19(火) 14:33:26ID:xzzJhUPgお答えありがとうございます。
ところがjcode.plをEUC-JPで保存出来ないんです。
他のファイルは出来るのですけど。。。
0565nobodyさん
2005/04/19(火) 14:51:11ID:???jcode.plを使って保存する文字列のコードをEUC-JPに変換する。
&jcode::convert(\$hoge,"euc-jp","sjis");
貴方の文脈では、jcode.pl自体をEUC-JPで保存しようとしてるぞ。
本当にそうだったりしてw
0566nobodyさん
2005/04/19(火) 15:30:24ID:???--start_of_aaa--
あああ ←
いいい ←この部分を@aaaに
ううう ←
--end_of_aaa--
--start_of_bbb--
かかか ←
ききき ←この部分を@bbbに
くくく ←
--end_of_bbb--
--start_of_ccc--
さささ ←
ししし ←この部分を@cccに
すすす ←
--end_of_ccc--
open (TMPL,'./tmpl.dat');
@templates = <TMPL>;
close TMPL;
foreach $line (<@templates>){
if($line =~ m|--start_of_aaa--|){
unless($line =~ m|--end_of_aaa|){
push @aaa,$line;
}else{
last;
}
}
if(以後同様の繰り返し)
}
当然@aaaには--start_of_aaa--しか入らないのですが、ここで詰まってしまい、先に進めません。。。
0567nobodyさん
2005/04/19(火) 16:02:20ID:???漏れならこうするかなあ。
my %data = ();
my $key = "__GOMI__";
foreach my $line (<@templates>) {
if ($line =~ m/--(start|end)_of_(\w+)--/) {
$key = ($1 eq "start") ? $2 : "__GOMI__";
$data{$key} = [];
} else {
push(@{$data{$key}}, $line);
}
}
my @aaa = @{$data{"aaa"}};
my @bbb = @{$data{"bbb"}};
my @ccc = @{$data{"ccc"}};
0568nobodyさん
2005/04/19(火) 16:19:21ID:n4Wb5OBGメールフォームのデータをCSVに保存するCGIの改造です。
吐き出されたデータが"xxxx"という風にダブルコーテーションで囲まれてしまいます。
これを外して登録したいのですが、ご教授お願いします。
$head = "DATE";
$head.= join("\",\"", 'DATE', @KEY);
$out_data = join("\",\"", @output);
if (-f $f2m_file){
open(OUT, ">> $f2m_file") or &openerr();
flock(OUT, 2);
seek(OUT, 0, 2);
}
else{
open(OUT, "> $f2m_file") or &openerr();
flock(OUT, 2);
seek(OUT, 0, 0);
print OUT jcode("\"$head\"")->sjis."\r\n";
}
print OUT jcode("\"$out_data\"")->sjis."\r\n";
close(OUT);
chmod(0644, $f2m_file);
}
0569質
2005/04/19(火) 16:37:39ID:xzzJhUPgいやあ、お恥ずかしい、その通りでしたw
ソースを書き換えて出来るようになりました。ありがとうございます。
0571nobodyさん
2005/04/20(水) 00:36:08ID:PF1TJn1KCGIなどによく「***.cgi?mode=find」みたいな感じでリンクになっていたりしますがmode=findの部分はどういう仕組みになっているのでしょうか?
0573nobodyさん
2005/04/20(水) 05:06:40ID:2zJFmw5b3/31 新井 50000
4/1 伊藤 10000
4/10 新井 -50000 50000
4/10 上田 20000
4/15 新井 30000
4/17 伊藤 -10000 10000
4/17 伊藤 40000
こんな感じのテキストデータがあって、
スタッフごと・月ごとに売上確定分や売上見込の集計を出したいんだが…
スタッフは単発もいるので、あくまでこのデータだけから抽出したいけど、
どうすればいいんだろうか。if文使いまくりになりそうで。
0574nobodyさん
2005/04/20(水) 05:34:11ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perllol.html
0575nobodyさん
2005/04/20(水) 09:22:01ID:???タブ区切りの場合:
while(<>){
if(/^(\d+)/){$tuki=$1;}
if(defined $sengetu and $sengetu != $tuki) {
print "$sengetu月\n";
foreach $key (keys %mikomi) {
print "$key: 見込=$mikomi{$key} 売上確定=$uriage{$key}\n";
}
undef %mikomi; undef %uriage;
}
if (/^\d/) {
split(/\t/,$_);
$mikomi{$_[1]} += $_[2];
$uriage{$_[1]} += $_[3];
$sengetu=$tuki;
}
}
print "$sengetu月\n";
foreach $key (keys %mikomi) {
print "$key: 見込=$mikomi{$key} 売上確定=$uriage{$key}\n";
}
0576nobodyさん
2005/04/20(水) 09:24:41ID:???0577573
2005/04/20(水) 09:47:22ID:???昨日一人で考え込んで明け方になっちゃったんだけど、
まさか起きたらもうレスがついてるとは思わなかったよ。
>>576の言うとおりだね。厚意をありがたく思います。
つか、>>575をコピペでいけちゃいそうだぞw 申し訳ないっす。
0578nobodyさん
2005/04/20(水) 18:30:18ID:???>>575だけどさ、まあいいってことよ。
その代わり、Perlを宣伝しろよな。
Perlに利害関係があるわけじゃないけどさ、このごろrubyが
幅利かせすぎだよね。
0579nobodyさん
2005/04/20(水) 18:33:21ID:???>過疎地だから、飛び入りにはやさしいスレです。
1年前or半年前くらいは、すっごいレスの伸び様だったがな。
何かさ、やっぱrubyに食われてる?それともphpか。
0580nobodyさん
2005/04/20(水) 20:02:41ID:???rubyやpythonに行くぐらいならjavaがいいや。
phpはApacheとの連携が強力なのでいっそJakarta Projectに
加わってApacheの標準Scriptの地位を固めてくれんかな。
0581nobodyさん
2005/04/20(水) 21:49:51ID:???while(<DATA>){
split/\t/;
$_[0]=~s/\/\d+$//;
$hash{$_[0]}{$_[1]}{miko} += $_[2];
$hash{$_[0]}{$_[1]}{kaku} += $_[3];
}
foreach my $tuki(sort{$a<=>$b} keys %hash){
print "$tuki月\n";
foreach my $name(sort keys %{$hash{$tuki}}){
print "$name:\t見込=$hash{$tuki}{$name}{miko}\t売上確定=$hash{$tuki}{$name}{kaku}\n";
}
}
0582nobodyさん
2005/04/20(水) 22:12:44ID:???0583nobodyさん
2005/04/21(木) 03:11:08ID:???a.cgi?k=1のようにアドレスバーに引数を含むアドレスが表示されますよね
CGIゲームなどをやっているとこの引数が表示されない場合があるのですが
そういう風に引数を見えなくするにはどうしたらいいのでしょうか
0584nobodyさん
2005/04/21(木) 03:31:43ID:???CGIスレとかWeb制作板で聞いてね
0585nobodyさん
2005/04/21(木) 09:48:59ID:u958lKZ/スクリプトを手動で実行すると動くのですが、cronから実行すると
ライブラリが見つからないと怒られてしまい困ってます。
0586nobodyさん
2005/04/21(木) 10:05:27ID:???0587nobodyさん
2005/04/21(木) 11:02:48ID:???全部グローバル変数でやってまして最近my変数を覚えたんですけど、
KENTの掲示板などを落として見てみてもmy変数使って無いですし、
そんなに長い処理でもないと思うので、そこまで気を遣う必要ってないのでしょうか。
自作しているのは、サブルーチンの階層も深くて2つまでです。
0588nobodyさん
2005/04/21(木) 16:44:18ID:???0590nobodyさん
2005/04/21(木) 17:56:10ID:???myは便利だよ。 もう my のない世界なんて考えられないって程に。
0591nobodyさん
2005/04/21(木) 18:24:00ID:???直せるうちに直しておいた方が、後で改造するときに分かりやすいと思う。
変数名なんて三日も空けば忘れるからな。
ちょっと手間をかけておく事で、後の面倒を大きく減らせる。
他のプログラム言語なんかも学ぶなら、my変数のような考え方は必須になる。
グローバル関数を無くし関数の独立性を高めるという考えは、カプセル化、そしてオブジェクト指向に繋がっていく。
0592nobodyさん
2005/04/21(木) 18:43:42ID:???0593nobodyさん
2005/04/21(木) 20:42:56ID:???詳しく。
0594nobodyさん
2005/04/21(木) 22:24:07ID:???0595nobodyさん
2005/04/21(木) 22:54:38ID:???0596nobodyさん
2005/04/22(金) 07:08:46ID:0S2C2eid0597nobodyさん
2005/04/22(金) 07:26:56ID:???Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/
Win なら
http://homepage3.nifty.com/hippo2000/perltips/perllha.htm
やりたい事によっては system() で lha(1) を使った方が早いかも。
0598nobodyさん
2005/04/22(金) 07:41:56ID:???そこでで聞いてみるっす
0599nobodyさん
2005/04/22(金) 16:04:20ID:???ググっても出ないorz
0600nobodyさん
2005/04/22(金) 16:07:04ID:???すんません
わかりました
0601nobodyさん
2005/04/22(金) 16:42:34ID:???0602nobodyさん
2005/04/22(金) 18:59:27ID:???これをもうちょっとこざっぱりとまとめて書きたいんですが…
どうしたらいいでしょうか?
0603nobodyさん
2005/04/22(金) 19:09:20ID:???0604nobodyさん
2005/04/22(金) 23:09:20ID:???この例で、$hensu1 にどのような文字列が来るか分からない時は、
必ず、
$aa=~s/\Q$hensu1/$hensu2/g;
とすべきなのでしょうか?
また、例えば、
$aa="ポっポっポ、はとポっポ";
$aa=~s/ポ/ぽ/g;
print $aa;
これでは、文字が化け化けで、
$aa="ポっポっポ、はとポっポ";
$aa=~s/\Qポ/ぽ/g;
print $aa;
とすれば正常になりますが、「ポ」と同じように\Qでクォートしなければ
いけない文字は、他に何がありますか?というか、どのような理屈で
クォートしなければいけないのでしょうか?
0606nobodyさん
2005/04/22(金) 23:15:23ID:???perl -e '$a0=1; $a1=2; $a2=3; for(0..9){print "$a$_\n";}'
みたいなんで$a0から$anまでの変数を作りたいんですが、これじゃ
変数名としてつながってくれないんです。
0607nobodyさん
2005/04/22(金) 23:39:50ID:???詳しくは「シンボリックリファレンス」をキーワードに調べてくれ。
しかし一応できるこたできるが、よっぽど特殊なことをやろうと
言うんじゃない限りはじめから配列かハッシュ使ったほうがいいと
思われ。
0609nobodyさん
2005/04/23(土) 12:37:33ID:???それとも、配列を使えない事情があるのか?
>607のコードが使える状況で配列が使えない状況ってのが思いつかんのだが…
0610nobodyさん
2005/04/23(土) 13:52:44ID:???リファレンスは意外と馴染みやすい。
0611nobodyさん
2005/04/23(土) 17:56:38ID:???0612606=608
2005/04/23(土) 18:16:56ID:???ごみんなさい、わては>>602じゃないです。
もち>>602の場合は、配列でしょうが、
コマンドラインでワイルドカードを引数において、たくさんのファイルを
読んでそのファイル名に応じた変数を作りたかったのです。
便乗質問の積もりですた。
0615nobodyさん
2005/04/23(土) 21:08:01ID:???登録されたデータ(ログファイル)から任意の3つくらいを抽出したいのですが、
このとき重複しないような方法がわかりません。
具体的にいうと、タグを何個か1つのログに登録しておいてそのなかの3つくらいを重複しないようにランダムに出したいのです。
randでやったらどうしても重複してしまいます。
0617nobodyさん
2005/04/23(土) 21:44:19ID:???んじゃ、>>616さんと違う手法で、
ランダムに並べ替えてから、任意の3つを取る。
@tag = ('big','small','strong','table','input','img');
for(@tag){
$hoge = rand(@tag);
($tag[$_],$tag[$hoge]) = ($tag[$hoge],$tag[$_]);
}
for(0..2){
print "$tag[$_]\n";
}
0619nobodyさん
2005/04/23(土) 23:55:32ID:???my @bbb = (
['ab','ac','ad',], # 0
['be','bf',], # 1
['cg',], # 2
); # このようなデータを用意しておき、
my $data = "abc"; # というデータを与えた時に
my @list = ( 'abbecg', 'abbfcg', 'acbecg', 'acbfcg', 'adbecg', 'adbfcg', );
# @listのような配列を作り出したいのですがどなたか教えて下さい。
# (1) %aaaのa,b,cの部分は英数字と記号が入ります。
# %aaaの0,1,2はそれぞれ順番に数字を割り当てています。
# (2) @bbbの一次元目の数値は%aaaの0,1,2と一致します。
# @bbbの二次元目の要素数は固定ではなく変化します。
# (3) $dataは%aaaに該当するものがあった場合にのみ「a→ab」のように変化し、
# %aaaに該当するものが無い場合は「z→z」のように変化しません。
# 現在は以下のようにしてランダムに出力しているのですが、
# 今やりたいことは出力される可能性のある文字列全てを取り出したいのです。
# 分かりにくくてすいませんが宜しくお願い致します。
> my $compdata = "";
> for(split//,$data){
> if ( $#{$bbb[$aaa{$_}]} || $bbb[ $aaa{$_} ][0] ne "" ){
> $compdata .= $bbb[ $aaa{$_} ][ rand $#{$bbb[$aaa{$_}]} ];
> }else{
> $compdata .= $_;
> }
> }
0620nobodyさん
2005/04/24(日) 01:27:40ID:???my @list;
for (split //,$data){
my $comp;
if(defined $aaa{$_}){
$comp=$bbb[0]->[$aaa{$_}];
}else{
$comp=$_;
}
for (@{$bbb[1]}){
my $temp=$comp;
$comp.=$_;
for(@{$bbb[2]}){
my $temp=$comp;
$comp.=$_;
push @list, $comp;
$comp=$temp;
}
$comp=$temp;
}
$comp="";
}
for(@list){
print $_,"\n";
}
0621nobodyさん
2005/04/24(日) 01:31:30ID:???#!/usr/local/bin/perl
use strict;
my %order = (a => 0, b => 1, c => 2, d => 3);
my @data = (
[ 'ab', 'ac', 'ad' ],
[ 'be', 'bf' ],
[ 'cg' ],
[ 'dh', 'di' ],
);
my @result;
my_push(\@result, [ @data[@order{ split //, $ARGV[0] }] ]);
print join "\n", @result;
sub my_push {
my($result, $data, $i, $pre) = @_;
if ($i == $#{$data}) {
push @{$result}, map "$pre$_", @{$data->[$i]};
}
else {
my_push($result, $data, $i + 1, "$pre$_") for @{$data->[$i]};
}
}
0622619
2005/04/24(日) 02:01:01ID:???ありがとうございます。
言葉が足りずに申し訳ございません。目的のものとは違ったようです。
$dataの文字数は毎回異なります。
>>621さん
ありがとうございます。
分かりにくい表現で申し訳ございません。
入力される文字列は設定済みの文字列だけではなく、
> %order = (a => 0, b => 1, c => 2, d => 3);
ではa,b,c,dが設定済みですが、e,f,g...x,y,zのような、
未定義の値が入力されることもあり、その場合は変化しないように出来ると嬉しいです。
とはいえ、後は何とかなりそうなの気がするので頑張ってみます。
お二方、本当にありがとうございました。
書き込みしてからも色々と調べていたのですが、
my %CCC = (
'a' => ['ab','ac','ad',],
'b' => ['be','bf',],
'c' => ['cg',],
);
こんな書き方も出来るのですね。
本当にありがとうございました。
引き続き頑張ってみます。
また、分からないことがあったら宜しくお願い致します。
0623nobodyさん
2005/04/24(日) 02:16:56ID:???0624nobodyさん
2005/04/25(月) 08:46:28ID:???$var =~ m/nantoka/igo; = $var =~ /nantoka/igo;
mって使う必要ないと思うんだけど、みなさん、いつ使ってます?
0625nobodyさん
2005/04/25(月) 11:04:05ID:???'/' を正規表現に含める時。
/^([^\/]*)\/([^\/]+)\/(.*)\z/;
/^ ([^\/]*) \/ ([^\/]+) \/ (.*) \z/x;
m|^([^/]*)/([^/]+)/(.*)\z|;
m|^ ([^/]*) / ([^/]+) / (.*) \z|x;
0627nobodyさん
2005/04/25(月) 16:13:33ID:???0628nobodyさん
2005/04/25(月) 20:42:14ID:???レスありがとうございます。
なるほど、/のエスケープを省略したいときですね。
誤りたいとき使うとまた誤らなきゃですね(w
どもども。
0629nobodyさん
2005/04/26(火) 12:58:40ID:???0630nobodyさん
2005/04/26(火) 14:53:35ID:???@list($h01,$h02,$h03)
$h01〜03に、例えばそれぞれ0,0,1と代入されている時
@listの中のどの変数に1と入っているかを確認するには?indexを使うんでしょうか?
if (@list==1) {・・・(以下続く)
これは間違ってる書き方ですがorz、
こんな風に『@listの中の変数のどれかが1であれば・・・』と
条件文の中に組込みたいのです。
0631nobodyさん
2005/04/26(火) 14:53:56ID:OvccyAYT0632nobodyさん
2005/04/26(火) 15:00:58ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_tell_whether_an_list_o
0633nobodyさん
2005/04/26(火) 17:41:53ID:???ありがとう!やってみます。
0634nobodyさん
2005/04/26(火) 18:10:21ID:6+zG2+f5$aaaが一定以上の値になった時、変動する$aaaをその値以上に固定する
というのはどう書けばいいでしょう?
if ($aaa >= 10) { $aaa != 10 ;}
何か違う・・・orz
0635nobodyさん
2005/04/26(火) 18:41:56ID:???0636nobodyさん
2005/04/26(火) 18:49:53ID:???すみません、説明が悪かったです・・・
$aaaは10以下にはならず、10以上の値には変動できる、という書き方です。
!を消すと$aaaは10、になってしまうので。。
0637nobodyさん
2005/04/26(火) 20:13:05ID:???10以下ならもう一度変動させれば?
あと「以下」と「以上」の使い方がおかしい。
10はどっちにも含まれるぞ?
0638nobodyさん
2005/04/26(火) 20:34:12ID:???乱数なのか、ユーザの入力値なのか、1ずつ減るカウンタ用の変数なのか、二次関数みたいな関数の値なのか。
$aaaに10を代入するのは何故いけないの?
$aaaに10を加算するだけでは駄目?
0639nobodyさん
2005/04/26(火) 20:37:06ID:6+zG2+f5ほ、ほんとだすみません、10未満にはならず、10以上の値には変動できる、です。
>もう一度変動させれば?
言われて気付いたんですが・・・、ここで出た結果のみで判断させたいんですorz
if ($aaa >= 10) { !($aaa <= 10) }
これだと10以上ではない、と言うだけですよねアー
0640634
2005/04/26(火) 20:47:57ID:???ええと、説明下手なんですが・・・
>ユーザーの入力値
はい、そんな感じです。
$aaaは値が1ずつ加算されて、上限(例えば100)で止まる、といった動きをします。
ゲームなどで得点が1ずつ増えていくような・・・
なので、代入や一気に加算する、といった性質の変数ではないです。
0641nobodyさん
2005/04/26(火) 22:12:18ID:???その処理をするには、3つの値(変数)が必要なんですよ。
1. 変動する値 (1ずつ加算される値)
2. 上限値 (100)
3. 保持する値 (上限値に達するまでは1と一致して、それ以降は2と一致)
文章で書くと$aaaと表現するので分かり辛いかも知れないですけど、
1.を比較等の色々の処理をした結果が3.になるわけで、これを1つの変数$aaaで表す事はできません。
0642634
2005/04/26(火) 22:41:02ID:Bt64jE3X詳説、ありがとうございます。目から鱗です。orz
変動する値の$aaaと、上限値$bbb、保持する為の変数が$ccc
$bbb=100;
#ここで$aaaを1ずつ足していく
#で、もし$aaaが10に達したら・・・
if ($aaa >= 10) {
・・・・この先がわかりません・・・
0646638
2005/04/27(水) 02:39:01ID:???比較と代入の理解が滅茶苦茶だな。
<=とか==とか<は比較をするだけで、値を変化させるわけじゃないぞ。
if($aaa > $bbb) $ccc = $bbb;
else $ccc = $aaa;
お前が本当にやりたい処理は
「$aaaが上限値($bbb)より大きいときは、$aaaを上限値にする」じゃないか?
ちょっと落ち着いて、場合分けして考えてみるといい。
個人的には
if($aaa > $bbb) $aaa = $bbb;
でじゅうぶんな予感もする。
上限値に切り揃える前の点数のデータが不要ならば、の話だけど。
0647638
2005/04/27(水) 02:40:06ID:???>「$aaaが上限値($bbb)より大きいときは、$aaaを上限値にする」
ちょっと誤解を招く表記だな。
「$aaaが上限値($bbb)より大きいときは、$aaaを上限値と等しい値にする」
に訂正。
0648nobodyさん
2005/04/27(水) 02:49:37ID:???0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20...
これをどう変動させたいのだ?
0649nobodyさん
2005/04/27(水) 09:44:59ID:???他のところで何やっても10までしか上がらない
ということを希望してるのか?
それだったら、$aaa 専用のクラスを一つ作って、専用の add() メソッドを実装しろ
$aaa 専用に += や ++ 演算子をオーバーロードするのも吉
0650nobodyさん
2005/04/27(水) 11:36:43ID:???0651634
2005/04/27(水) 12:41:57ID:???>比較と代入の理解が滅茶苦茶
はい、値を変化させるものではないのはわかっているんですが、表現が思いつかず・・・
>プログラムの一箇所で「この変数の値は絶対を超えません」と宣言すれば
>他のところで何やっても10までしか上がらない
はい、そんな感じです。
ただ、10までしか上がらないのではなく、10より下には下がらない、というのを希望しています。
add() メソッドは、調べてみたのですがちょっと難しくてわかりませんでした。
折角紹介してくださったのにすみません。
0652634
2005/04/27(水) 12:42:18ID:???余計何したいのかがわかりにくくなってしまいましたよね・・・・orz
下限0から始まって上限100で止まる
0から始まって、ユーザーの入力にあわせて1ずつ加算・減算されていく
(加算と減算は別のところで処理させるつもりでした)
0 1 2 3 4 5 6 7 8 9 10
10まで達したら、
11 12 13 14 15 16 17 18 19 20...
引き続き加算と減算が行われるが、一旦10以上になったら、
それ以降は減算されても値は10未満にはならず、10〜100の間で上下する
こんな動作をさせたいと思っていました・・・
0653nobodyさん
2005/04/27(水) 13:05:03ID:???10を越えた時点でフラグを立てればいいんじゃないの
if ($aaa >= 10) $flag = 1;
if ($flag && $aaa < 10) $aaa = 10;
0654nobodyさん
2005/04/27(水) 13:09:00ID:???一応突っ込んでおくが Perl にぶら下がり if は無い。
Perl のスレなんだから Perl で答えてやれよ。
0656nobodyさん
2005/04/27(水) 14:20:48ID:???0657654
2005/04/27(水) 14:39:18ID:???うーん、あまり一般的な表現ではないようだね。
Perl には if (EXPR) EXPR という構文は無くて、
必ず if (EXPR) BLOCK ないし EXPR if EXPR と
書かなければいけない、って言いたかったんだ。
http://www.nurs.or.jp/~sug/soft/super/macro.htm
での用法のように、if (EXPR) EXPR という構文の
事を「ぶら下がり if」と呼ぶと解釈してたよ。
本題と関係無い話でスレ汚しごめん。>ALL
0658652
2005/04/27(水) 15:01:10ID:FBojevS6$flag=0;
if ($aaa >= 10) {$flag = 1;}
#$aaaが10以上の場合、$flagが立つ
if ($flag= 0 && $aaa < 10) { $aaa = 10; }
#$flagが立っておらず、$aaaが10より小さい場合・・・$aaaは10
?????orz
10より下に行かないようにするって処理を
どう書いてやればいいのかわかりません・・・
0659nobodyさん
2005/04/27(水) 15:06:58ID:4gECGjaSphpの正規表現で
ereg(.*[EGG|EVA].*, $str);
とした場合、マッチするのは*****EGG****か*******EVA*******と言う
$strで良いのでしょうか?
0660nobodyさん
2005/04/27(水) 15:09:21ID:I4dBvpe7でelseをぶら下がり文に使った時に起きる問題がdangling else
>>658
おまえにプログラミングは無理だ
0661nobodyさん
2005/04/27(水) 15:11:46ID:4gECGjaS0662nobodyさん
2005/04/27(水) 15:47:03ID:???binmode(STDOUT,":encoding(charset)");
を使うと、必ず $! に Bad file descriptor と入ってしまうのですが、
どうにかならないのでしょうか。
調べてみても
「binmodeを使えばすでに開いているファイルハンドルにPerlIOレイヤを設定できる」
としか説明されておらず、このことには触れていないようなので、発生するのはActivePerlだけなのでしょうか…。
binmode(STDOUT,":utf8");
binmode(STDOUT,":bytes");
などの":encoding(charset)"が無いの場合は、エラーは起こりません。
shift_jisで出力したいので困ってしまって…。
0663nobodyさん
2005/04/27(水) 16:00:17ID:???基本的に「10より下にいかないようにする」ことはできないと思ってくれ
代わりに「10より下にいくたびに無理矢理10に戻す」処理を行なう
それも、スクリプト中の下にいきそうな可能性のある箇所全てで、ということになる
if ($flag= 0 && $aaa < 10) { $aaa = 10; } というのは
「もしフラグが立っていて、つまり $a が10以上になったことが過去あって、
しかも現在 $a が10を下回っていたら、$aを無理矢理10に戻す」
という意味だ
0664nobodyさん
2005/04/27(水) 16:17:40ID:???ああー、わかりました・・・!!!!
まずできる事とできない事の切り分けができていなかったんですねorz
今回のやり取り、ホント勉強になりました。皆さんありがとうございます。
0665nobodyさん
2005/04/27(水) 16:27:56ID:???つか $! にそのメッセージがセットされても -w 下で警告が出るわけで無し、
#!/usr/local/bin/perl -w
use strict; use Encode qw(from_to);
from_to(my $str = "いーゆーしーじぇーぴー\n", 'euc-jp' => 'utf8');
utf8::decode($str);
binmode STDOUT, ':encoding(shiftjis)';
print $str;
…でちゃんと Shift_JIS で出力されるし、何か困る?
#!/usr/local/bin/perl -w
use strict; use encoding 'euc-jp', STDOUT => 'shiftjis';
print "いーゆーしーじぇーぴー\n";
だと $! はセットされないね。
何にしても
<q cite="http://search.cpan.org/~nwclark/perl-5.8.6/pod/perlvar.pod#$!">
If used numerically, yields the current value of the C errno variable, or in
other words, if a system or library call fails, it sets this variable. This
means that the value of $! is meaningful only immediately after a failure:
</q>
だから、システムコール系の関数でエラーした時にそのエラー内容を
調べる以外の用途で $! の値を見ても意味無いよ。
0666nobodyさん
2005/04/27(水) 16:53:30ID:???なるほど、システムコールに失敗したとき以外の $! は何の意味も持たないんですね。
binmode(STDOUT,":shift_jis");
みたいな間違いをしたとき、期待した文字エンコーディングにならないだけで、
-wで警告もでなければ、エラーも起きず、$!を見てみると No such file or directory になっていたので、
これもまた表にでないエラーが起きているのかと思ってしまいました。
use encodingは、グローバルなんでちょっと使えませんでした。
他で何カ所かファイルを読み込むときに、それぞれのファイルの文字エンコーディングが統一されていない為です。
スッキリしました。
お返事、どうもありがとうございます。
0667nobodyさん
2005/04/27(水) 16:58:33ID:???すいません、警告でてました…。
warningsToBrowserでは表示されないみたいですね。
コマンドラインから実行したらきっちり、Unknown PerlIO layerってでてました。
0668nobodyさん
2005/04/27(水) 19:09:04ID:???$bbb = 100;
#最初の入力プロンプトを出力
print "> ";
while(<STDIN>){
#入力が数値の場合、$aaaから入力分を減算
if(/^\d+$/){$aaa -= $_;$flag = 1}
#入力が空の場合、$aaaに1加算
elsif(/^$/){$aaa++;$flag = 0}
#入力が数値または空以外の場合、終了
else{last}
#入力が減算かつ$cccの値が10以上かつ$aaaが9以下の場合、$aaaに10をセット
if(flag && $ccc>=10 && $aaa<=9){$aaa = 10}
#$aaaが負の場合、$aaaに0をセット
elsif($aaa<0){$aaa = 0}
#$cccの値が$bbbより小さい場合、$cccに$aaaをセット
if($ccc<$bbb){$ccc = $aaa}
#現在の$cccを出力
print "$ccc\n";
#次の入力プロンプトを出力
print "> ";
}
0670nobodyさん
2005/04/27(水) 19:24:42ID:???$flagの処理は無くてもいいから下のように書ける。
$bbb = 100;
print "> ";
while(<STDIN>){
if(/^\d+$/){$aaa -= $_}
elsif(/^$/){$aaa++}
else{last}
if($ccc>=10 && $aaa<=9){$aaa = 10}
elsif($aaa<0){$aaa = 0}
if($ccc<$bbb){$ccc = $aaa}
print "$ccc\n";
print "> ";
}
0671nobodyさん
2005/04/27(水) 20:24:16ID:???my($m,$n,$i)=(10,100,0); # min, max, start
do{print$i=$2?$i==$n?$n:$i+1:$i==$m?$m:$i==0?0:$i-1,' > '}
while<STDIN>=~/^((\+)|-)$/;
0672638
2005/04/27(水) 21:21:37ID:???>Perl にぶら下がり if は無い
最近Perl書いてないから忘れてたorz
0673nobodyさん
2005/04/27(水) 22:56:09ID:D9rBVnk5ファイルの内容を print してから、
新しい値をそのファイルに追記したいのですが、
以下のようにやっても +>> のモードなのに
ファイルの中身が取れません。
open( DATA, "+>> count" );
print <DATA>;
print DATA qq(test\n);
close( DATA );
追記は出来ているんですが、
このモードでは読み込みができないのでしょうか?
0674103
2005/04/27(水) 22:57:19ID:???つかぬことをお伺いします。
掲示板への投稿内容を利用者に送信するというスクリプトを
作っている途中で思ったのですが、
sendmailを使って5通同報メールを送信する場合、
1)5回、メール送信動作を繰り返す
2)BCCに5通分のアドレスを記述してメールを送信する
どちらがサーバー負担軽いのでしょうか。
#メールを5通出すということには変わりはないですが。
それ以前にどうやってBCCに複数アドレスを書くかという
問題にぶつかっていたりしますが(爆死
0675nobodyさん
2005/04/27(水) 22:58:40ID:NwHD2MSRDES方式のパスワード認証をMD5に変えようとしました。
はじめのパスワード設定はしっかりできました。
しかしいざ認証になると”パスワードが違う”となってしまいます。
CGIレスキューチャレンジ/www.rescue.ne.jp/cgi/md5/を読むと、
認証の部分はDESとMD5は同じとあったので、同じにしたのですが
考え方まずいんでしょうか(汗)
0676675
2005/04/27(水) 22:59:05ID:NwHD2MSR#マスターパスワードのセット:動作する
sub pass_set
{
if($in{'setpass'} != $in{'setpass2'}){ &error("パスワード不適合"); }
open PASS, ">$passfile" or &error("$passfileが開けませんでした。");
#ここを変えた↓
$pass = crypt("$in{'setpass'}", "\$1\$$salt");
print PASS "$pass";
close PASS;
}
#パスワードのチェック
sub password_check
{
open(PASS, "$passfile") or &error("$passfileが開けませんでした。");
$pass = <PASS>;
close PASS;
if($in{'mode'} eq "login"){
#↓ここを変えた
$in{'pass'} = crypt("$in{'setpass'}", "\$1\$$salt");
if($in{'pass'} eq $pass){
print qq(Set-Cookie: USER=1\n);
}else{&error("パスワードが違います。");}#このエラーが出てる
(以下略)
0678673
2005/04/27(水) 23:11:04ID:???オライリーのラクダ本に書いてあったので使ってみました。
>> との違いは、読み出しがOKなだけみたいです。
そもそも +>> 自体が無い!?
0679nobodyさん
2005/04/27(水) 23:14:05ID:???たぶんファイルポインタがopen直後は末尾をさしてるとか
そんなとこじゃない? 読み出す前にseek DATA, 0, 0;してみ。
0680nobodyさん
2005/04/28(木) 00:48:30ID:???0681nobodyさん
2005/04/28(木) 01:39:04ID:A2bYvrGqprintではなくpushはだめなの。
0682nobodyさん
2005/04/28(木) 03:05:17ID:???0683nobodyさん
2005/04/28(木) 05:39:07ID:???http://search.cpan.org/~nwclark/perl-5.8.6/pod/perlopentut.pod#Mixing_Reads_and_Writes
読み書き両用で open した直後のファイルポインタは '+' 無しで
open した際と概ね一致するが、プラットフォームやヴァージョンに
よってそうならない場合もあるので常に seek を入れるが吉。
>>674
2)
>>675-676
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/
0684nobodyさん
2005/04/28(木) 06:39:34ID:???oepn直後に
print "tell:", tell(DATA), "\n";
でも入れてポインタの位置を確認。
# '+<'で読んだ後、seek(DATA, 0, 2)して追記でもいい気がする。
>>674
ルークよ、カンマを使え。
0686673
2005/04/28(木) 09:25:16ID:???回答ありがとうございました。
ご指摘の通り、ファイルポインタの位置が原因で
読み込みができていなかったようです。
seek( DATA, 0, 0 );
を追加したところ、正常に読み込めました!
また、追記のときはファイルポインタの位置に
関係なく必ず末尾に挿入されるようです。
seek( DATA, 0, 0 );
の後だったので
seek( DATA, 0, 2 );
が必要かと思いましたが、
無しでも正常に追記できてました。
0688nobodyさん
2005/04/28(木) 11:06:32ID:???">>"でopenするとO_APPENDが指定されるので
writeは必ずファイルの末尾に行われる。
逆にいうと末尾以外のところにseekして書きたい
のに ">>"や"+>>"で開くとあれ?とかいうことに
なるので注意。昔やってしばらく悩んだ(笑)
ファイルを読み書き両方で開きたい & なければ
つくって欲しい & 存在すれば中身はそのまま
という条件で開こうとするとつい '+>>' 使い
たくなるんだよね...
0690nobodyさん
2005/04/28(木) 16:03:43ID:???遅レスですが、>668さん、>670さん、
わざわざ書いて下さって感涙です・・・助かりました。
まだ知識も経験も少ないので、例があると理解しやすいです・・・
お礼もできましたので、これでホントに名無しに戻ります。
ありがとうございました。
0691nobodyさん
2005/04/28(木) 17:26:10ID:tmfF6IZwuse Net::SSLeay
qw(get_https post_https sslcat make_headers make_form);
の部分で
Can't locate Net/SSLeay.pm in @INC (@INC contains: /usr/local/lib/perl5/5.8.6/i686-linux /usr/local/lib/perl5/5.8.6 /usr/local/lib/perl5/site_perl/5.8.6/i686-linux /usr/local/lib/perl5/site_perl/5.8.6 /usr/local/lib/perl5/site_perl .) at test.cgi line 7.
BEGIN failed--compilation aborted at test.cgi line 7.
とエラーが出るのですが、なんだかわかりませんでしょうか。
0692nobodyさん
2005/04/28(木) 17:44:55ID:???0693nobodyさん
2005/04/28(木) 18:33:54ID:???日本語訳もあるんだしさー。
ttp://www.att.or.jp/perl/man/perldiag.1.html
0694nobodyさん
2005/04/28(木) 23:31:11ID:xLVfIYcWテキストファイルを複数のCGIで書き込んだり呼び出したりしている
のですが、最近急にデータがレコード単位で消えたりし始めました。
100レコードあったとすると、20〜30行だけが消えていたりして、
レイアウトがずれてる場合もあります。
ファイルロックは、書き込みをするCGIのみ記述しているのですが、
呼び出しのみのCGIも記述する必要があるのでしょうか?それとも
プログラムミスの可能性の方が大きいでしょうか?
言葉のみの記述でうまく説明できていないかもしれませんが、なにか
ヒントでもいいので教えて下さい。
0695nobodyさん
2005/04/28(木) 23:52:07ID:???くずれる可能性はあると思う。
0696nobodyさん
2005/04/29(金) 03:28:27ID:???読み込んでいる最中のファイルを書き換えられる、が正解。
同じく読み込み側でロックすることを薦める。
0697nobodyさん
2005/04/29(金) 11:46:38ID:???だうと。
プロセス A がロックしているファイルをプロセス B が読む場合、
・共有ロックか排他ロックか
・mandatory lock か advisory lock か
・advisory lock なら、B でロック状態をチェックするか否か
で話が変わる。
例えば A が advisory lock で排他ロックをかけていても、B が
自発的にロック状態をチェックし、ロックされていれば読み書きを
"控える" という事をしない限り、ロックとして正しく機能しない。
【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/
0698nobodyさん
2005/04/29(金) 15:51:27ID:???とかわからないと議論できんな
0699nobodyさん
2005/04/29(金) 21:44:09ID:s7r+/5xEunicodeで書かれたサイトの抜き取りができません
どうすればいいですか
0700nobodyさん
2005/04/29(金) 23:10:47ID:???0701nobodyさん
2005/04/30(土) 00:33:02ID:???何らかの日本語処理をしていると思うので、ちょっと質問です。
漢字はEUCを使っていますか?
日本語を扱う場合、当然EUCの方がはるかに問題が少ないので、EUCを使うべきでしょうが
パソコンでEUCを使うのって、非常に面倒くさくないですか?
ファイルをイチイチEUCで書き出さなければいけないし、簡単なデバッグするのに
DOS窓で > Perl aaa.cgi としても、printで出力した漢字は化けるし....。
何か、簡単にEUC環境を作る方法ってあるのですか?
0702nobodyさん
2005/04/30(土) 00:45:19ID:???サーバにアップってのは、開発をローカルでやるわけ?
サーバがあるのなら、サーバで開発すればいいじゃん。
日本語処理を別個にしたりはしないんじゃない?エディタ使うだけだし、敢えて
別文字コード変換とかあってもエディタに変換機能ぐらいあるだろうし。
0703nobodyさん
2005/04/30(土) 00:56:09ID:???0704nobodyさん
2005/04/30(土) 01:15:44ID:???文字コードを知った上で使う分には特に問題は起きないよ。
問題が少ないからとりあえずEUC使っとけ。って考えは間違っていると思うのだが。EUCにはあまりメリットを感じないし。
0705nobodyさん
2005/04/30(土) 02:10:32ID:???0706nobodyさん
2005/04/30(土) 04:29:56ID:???0707nobodyさん
2005/04/30(土) 04:40:04ID:???perl aaa.cgi > out.txt
俺はCGIとしての形をとっとと整えて、ローカルで鯖立ててテストするけど。
文字コードは何も考えずEUC。間違ってても動けばいいや。
0708nobodyさん
2005/04/30(土) 07:18:59ID:???EUCやUTF-8などでリリースするときは
文字コードに依存する部分を変更してる。
文字コードの変換、
依存部分の変更はスクリプトで自動化。
0709nobodyさん
2005/04/30(土) 08:55:13ID:???Winではsjisを使う事が多い。
探せばeuc-jpで動くコマンドシェルはあるだろうけど、printの出力だけなら、
open(STDERR,"|nkf -uEs");
open(STDOUT,"|nkf -uEs");
system(join(' ',@ARGV));
とか
use IPC::Open3;
use threads;
use Encode;
$pid=open3(*I,*O,*E,@ARGV) || die "Can't exec @ARGV";
my $o = threads->create(sub {while(<O>) { Encode::from_to($_,'euc-jp','shiftjis');print STDOUT $_}});
my $e = threads->create(sub {while(<E>) { Encode::from_to($_,'euc-jp','shiftjis');print STDERR $_}});
$o->join;$e->join;
程度の手抜きで間に合わせたらどうかな。
0710nobodyさん
2005/04/30(土) 11:47:38ID:???0711nobodyさん
2005/04/30(土) 11:59:18ID:???シフトJIS使ってたら、例えば、マッチングで検索の対象となる文字列、
検索する文字列に何がくるか分からない時などは、文字コードを知った上でも
対処のしようが無いと思うのだが。
0712702
2005/04/30(土) 12:38:41ID:???某サイトの表現が悪いのか、読み手の読解力がないのか。。
0713nobodyさん
2005/04/30(土) 14:37:28ID:???\Q \E でくぉーとしないとできない → マッチできない
ってだけだろ。くだんねーこと書き込むな。
0715nobodyさん
2005/04/30(土) 16:38:52ID:???$html =~ s/<.*?>//g;
だけで良いですよね?
0716nobodyさん
2005/04/30(土) 17:44:57ID:???@a=(1,32,6,14);
という配列があります
これを
1,6,14,32という風な順番にしたいです。
@result=sort @a;
という風にしても
結果は1,14,32,6という文字列の順番になってしまいます。
おねがいしますs
0720nobodyさん
2005/04/30(土) 18:40:29ID:???0721nobodyさん
2005/04/30(土) 18:54:13ID:???0726nobodyさん
2005/04/30(土) 22:20:19ID:???0727nobodyさん
2005/04/30(土) 23:02:52ID:???0728nobodyさん
2005/05/01(日) 01:45:23ID:???<a href="〜" title="いれるなら<ここ>だ!">
Shift-JISで検索や置換するときは、タブとかでぶった切ってから処理するという荒業をやってる。もっとマシな手はあるんだろうけど。
$str =~ s/([\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]|[\x20-\x7e\xa0-\xdf])/$1\t/g;
0729nobodyさん
2005/05/01(日) 02:11:46ID:???おいおい、おまえもイマイチだぞ。
HTMLならたとえクオーテーション内でも < とか > は < や > って書かなければいけないことくらい知ってるだろう?
正しいHTMLの例で例外を例示しろよ。
0730nobodyさん
2005/05/01(日) 02:22:23ID:???これらの場合だけ別に処理すればいいでしょう。
0731nobodyさん
2005/05/01(日) 12:27:22ID:???s/<!--.*?-->//sg;
while (s/<[^<>]*>//g) { }
0732715
NGNG忘れました・・
0733715
NGNG[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
ですね・・
0736nobodyさん
2005/05/02(月) 03:24:44ID:???0737nobodyさん
2005/05/02(月) 03:30:04ID:???やってみているのですが、ぜんぜんできません。何がおかしいんでしょうか。
use encoding 'shift-jis', STDIN=>'shift-jis', STDOUT=>'shift-jis';
undef $/;
open(FILE,"test.txt");
$text=<FILE>;
close FILE;
if($text =~ /本来/m) {print "OK!\n";}
perlのバージョンは、v5.8.5 built for cygwin-thread-multi-64intで、
スクリプトおよび対象テキストの文字コード-改行コードは、すべてsjis-dos
です。
0738737
2005/05/02(月) 03:34:27ID:???×「複数行の検索」→○「複数行にまたがる文字列の検索」
test.txtは、
----
おかしいな。区切り文字($/)未定義にすれば、本
来できるはずだが。
----
です。
0739nobodyさん
2005/05/02(月) 03:38:21ID:???sjisなら本の2バイトめが{になってるようだけど?
0740737
2005/05/02(月) 03:44:31ID:???どんな文字でもだめです。そもそもuse encodingしてるから
そこら辺のエスケープはしなくていいものと思われ。
0741nobodyさん
2005/05/02(月) 03:52:34ID:???「本\n来」じゃないよね?
0742nobodyさん
2005/05/02(月) 04:03:24ID:???違う、違うよお馬鹿さん。
mオプションってのは、イメージ的に
/^本来/m ≒ /(?:^|\n)本来/
/本来$/m ≒ /本来(?:$|\n)/
ってなるだけであって、そういう使い方じゃない。
0743nobodyさん
2005/05/02(月) 07:01:48ID:???でうまくいった。
0744737
2005/05/02(月) 08:14:55ID:???ども、mオプション使えね。
undef $/;
open(FILE,"test.txt");
$text=<FILE>;
close FILE;
if($text =~ /本\r\n来/m) {print "OK!\n";}
でOK!ですた。
>>743
encoding関係なく行けた。
0745737
2005/05/02(月) 08:16:16ID:???if($text =~ /本\r\n来/) {print "OK!\n";}
が正解。mオプションなんて関係なかたてことですた。
0746nobodyさん
2005/05/02(月) 14:21:32ID:???とりあえず、これだとダメでした。
eval { use Image::Magick; };
0747nobodyさん
2005/05/02(月) 14:50:30ID:???Test::Moreのuse_okを見るとrequireとimportにわけてevalの中でやってますね。
0749nobodyさん
2005/05/02(月) 21:41:42ID:???> eval { use Image::Magick; };
eval q{ use Image::Magick; };?
0751nobodyさん
2005/05/05(木) 11:35:47ID:???クラス内の変数をさまざまな表現で表示したい時は
「表示させる関数を用意する」と
「表示させるクラスを用意する」、どちらが一般的なのでしょうか。
もし使い分ける、などならメリットとデメリットも教えて頂きたいです。
PHPもオブジェクト指向も初心者なので的外れな質問だったらごめんなさい。
なお環境はPHP4.3.10 AN http WindowsXPです。
//クラス内に表示させる関数を用意する-----------------
$text = new Text;
echo $text->i();
class Text{
var $a="AAA";
function i(){
return "<i>{$this->a}</i><br>";
}
}
//クラス外に表示させるクラスを用意する-----------------
$text = new Text;
$html = new Html;
echo $html->i();
class Text{
var $a="AAA";
}
class Html{
function i(){
global $text;
return "<i>{$text->a}</i><br>";
}
}
0752nobodyさん
2005/05/05(木) 11:36:15ID:???0753nobodyさん
2005/05/05(木) 18:56:12ID:HQz6o/x30754nobodyさん
2005/05/05(木) 20:41:24ID:XayIK0rw0755nobodyさん
2005/05/07(土) 02:12:00ID:???(Perl的にやってもいいのでしょうか)
具体的には
open(A, 'test.txt');
〜何らかの処理
open(B, 'test.txt');
〜何らかの処理
close(B);
〜何らかの処理
close(A);
のようなことです。
0756nobodyさん
2005/05/07(土) 02:13:47ID:???カウントされないようにBRL04-aで取得したWANがわのIPアドレスを取得したいのですが、どうすればよいですか?
とりあえず、DNSで正引きしてみたけどダメでした。
CGIで使うのでPerlで作りたいのです。
0757nobodyさん
2005/05/07(土) 02:38:42ID:???全部が読み取りなら可能。そういうことをやるべきかどうかは知らんが。
>>756
ルータの取得したWAN側アドレスはルータに聞くしかない。
SNMPでMIBを叩くのが筋だとは思うが、BRL-04はSNMPをサポートしてないよな。
BRL-04の設定画面をLWPで叩いてHTMLの中からWAN側アドレス表示のとこだけを抜き出す、
というのがたぶん現実的だろう。
0758nobodyさん
2005/05/07(土) 03:21:03ID:???('A`)
0759nobodyさん
2005/05/07(土) 15:07:18ID:???習作でサーバーに保存した一次ファイルを偽セッションとして使い、
perlだけでの認証制の掲示板を作ろうとしています。
とりあえずパッケージsession.plはできたんですが、ここで疑問が…
htmlのmetaヘッダで$permission = "<meta name='robots' content='noindex'>\n";の指定は出来るようにしてあるんですが、
これだけでログの外部流出は防げるんでしょうか?
もちろん普通に見た場合はsession見てイレギュラーなアクセスは弾くようにするつもりですが、
googleなどのキャッシュに引っかからないかどうかがわからないんです。
0760nobodyさん
2005/05/07(土) 15:24:38ID:???一次ファイル(ってなんだか知らんが)そのものを見られなくしよう
0761nobodyさん
2005/05/07(土) 15:45:32ID:???一時ファイルです。
当然ログファイル等はサーバーの権限設定で見られなくするつもりですが、、
そうではなくてログを暗号化するとか、そういう話でしょうか?
0762nobodyさん
2005/05/07(土) 15:58:59ID:???うぅすみません、いまいち意味がわからないです。
例えば.htaccessで弾いた場合、googleのキャッシュには絶対に引っかからないんでしょうか。
0763nobodyさん
2005/05/07(土) 16:03:27ID:???ハッシュの中身を別ファイルから読み込ませる方法ってありますか?
例えば
addr.txtの中に、以下の3行だけがあったものとして
aaa,[email protected]
bbb,[email protected]
ccc,[email protected]
(カンマ区切り)
これを
addr.cgiの中で
%addr_list = (
'aaa' => '[email protected]',
'bbb' => '[email protected]',
'ccc' => '[email protected]',
);
っていうふうに。@が入るのでシングルクォーテーションで括りたいです。
0764nobodyさん
2005/05/07(土) 16:08:06ID:???my @tmp;
while (<FILE>) {
@tmp = split ',', $_;
$addr_list{$tmp[0]} = $tmp[1];
}
0766nobodyさん
2005/05/07(土) 16:39:07ID:???ありがとうございます。
ログではなく、表示するページ(データから動的に生成&偽セッションでアクセス制限)でも
同じ事なのでしょうか。
0768nobodyさん
2005/05/07(土) 17:09:19ID:4STWB1kowwwwwwwwwwwwおkwwwおkwwwっっっうぇ
っうぇっうぇっうぇwwwwwwwwwうぇwww
おkwwwっうぇうぇwwwうぇwwwwwwっうぇ
0772nobodyさん
2005/05/08(日) 02:25:33ID:EhQFLRWQperlには多次元配列ってありますか?ないのなら代わりになるものってありますか?
0773nobodyさん
2005/05/08(日) 02:27:51ID:???http://www.google.co.jp/search?q=perl+%E5%A4%9A%E6%AC%A1%E5%85%83%E9%85%8D%E5%88%97
0774nobodyさん
2005/05/08(日) 02:40:55ID:???俺いっつも↓みたいな感じでやってた
@a = (0,1,2,3,4,5);
@b = (0,1,2,3,4,5);
@c = (0,1,2,3,4,5);
@d = (\@a,\@b,\@c);
foreach(@d){
foreach $e (@$_){
print "$e<br>";
}
}
0775nobodyさん
2005/05/08(日) 03:10:27ID:???0776nobodyさん
2005/05/08(日) 03:43:11ID:???0777うんこ
2005/05/08(日) 04:23:54ID:???$d->[0] = [ qw/1 2 3 4 5 6/ ];
$d->[1] = [ qw/1 2 3 4 5 6/ ];
$d->[5] = [ qw/1 2 3 4 5 6/ ];
$" = ', ';
for my $arr_ref (@$d){
print ref $arr_ref || 'undef';
print " [ @$arr_ref ]\n"
}
0778nobodyさん
2005/05/08(日) 06:47:54ID:???my @tmpはwhile内に書くべきだな。
あと俺的別解。
while (<FILE>) {
/^(.*?),(.*)$/;
$addr_list{$1} = $2;
}
0780nobodyさん
2005/05/08(日) 19:50:28ID:WVJV6mZK0783nobodyさん
2005/05/08(日) 20:29:12ID:uPGwNCs6うぇwwwうぇwwwうぇwwwっうぇおkwwwおkwww
っうぇwww
うはっwwwうぇwwwwww
うぇwwwっうぇwwwwwwwwwwwwっwwwwwwwwwwww
0784nobodyさん
2005/05/08(日) 20:43:54ID:tDynd5YAwwwwwwwwwwwwwおkwwwっうぇ
wwwwww
うぇwwwっうぇうはっwwwうはっwww
www
おkwwwうぇwwwうはっwwwwwwwww
0785nobodyさん
2005/05/08(日) 20:57:01ID:???そこら辺がいまいちよくわかってないんです。。
例えば関数で
sub hogege {
my @arr_return;
push @arr_return, 'hoge';
return \@arr_return;
}
$ref = &hogege();
print $$ref[0];
ってやって、関数の外でリファレンス参照して使えると思うんですが、
コレってつまり、myで作ったアドレスが裏で確保し続けられてるって事ですよね?
なので
foreach (@a) { my$aa; $a=1; }
↑とかやっちゃうと、回った数だけmyでアドレスを確保されちゃうような気がして
my $aa;
foreach (@a) { $a=1; }
delete $aa;
↑こういう風にしてるんですが。。
ここら辺って、どうなんでしょう?
0788nobodyさん
2005/05/08(日) 21:58:32ID:???delete EXPR
指定されたハッシュの、指定されたキーと対応する値を削除します。
%ENVの要素を削除すると環境変数が削除されます。
です。間違えました。undefでした(汗
0789nobodyさん
2005/05/08(日) 22:48:22ID:???for($i=0;$i<16;++$i) {
my $a;
print \$a,"\n";
}
どうなった?
0790nobodyさん
2005/05/08(日) 23:09:13ID:???ラクダ本とかだとその辺 (変数が消滅するタイミング) がきちんと解説されていたと記憶
そういや昔、循環参照するデータ構造を FastCGI で動かして
メモリが洩れまくって焦ったことがあったよ
0791nobodyさん
2005/05/08(日) 23:28:04ID:???データの保存先ディレクトリを変えること (たとえば実行スクリプトのあるとこにする) ってできるのかな?
やり方知ってる人いたら、説明書いてる URL でもいいから教えて… orz
0792nobodyさん
2005/05/08(日) 23:34:26ID:???全部同じ所を参照しておりました…何故だーw
ありがとうございます。
>>790
ラクダ本…今度立ち読みしてみます。。
一応以下本文及び実行結果です。。
(1) for($i=0;$i<3;++$i) { my $a; print \$a."<br>"; }
→ SCALAR(0xcf7a4), CALAR(0xcf7a4), SCALAR(0xcf7a4)
(2) for($i=0;$i<3;++$i) { print &asd(rand(time))."<br>"; }
→ SCALAR(0xf7178), SCALAR(0xf7340), SCALAR(0xf7178)
(3) for($i=0;$i<3;++$i) { my $a = &asd(rand(time)); print "$a<br>"; }
→ SCALAR(0xf7340), SCALAR(0xf7178), SCALAR(0xc6a98)
sub asd { my ($a) = @_; return \$a; }
0793nobodyさん
2005/05/09(月) 00:39:00ID:???それは Perl のコーディングやら DBI ではどうにもならん話で
たぶん MySQL スレあたりに行って聞いた方が良い
「シンボリックリンクで解決しる」とかいうことになるんじゃないかという気はする
0794nobodyさん
2005/05/09(月) 00:50:11ID:???シンボリックリンクだと意味ないなあw
ありが�d! 早いけど諦めてみる… orz
…あ、自分トコにデータファイルを作るデータベースの、とかはあるのかな?
0795nobodyさん
2005/05/09(月) 01:09:17ID:???0796nobodyさん
2005/05/09(月) 01:57:09ID:???0798nobodyさん
2005/05/09(月) 03:11:27ID:???0799nobodyさん
2005/05/09(月) 03:55:27ID:???0800nobodyさん
2005/05/09(月) 03:57:44ID:???0801nobodyさん
2005/05/09(月) 14:20:56ID:???タブ無効、改行有効です。
--------
foreach (@$ref) {
#デミリタは<>、元々の<>はエスケープ処理
foreach (@$_) {
$_ =~ s/¥<¥>/¥¥<¥¥>/g;
}
my $tmp = (join '<>', @$_);
#改行はタブに変換、元々のタブは無効(半角空白)にする
$tmp =~ s/\t/ /g;
$tmp =~ s/\r\n|\n/\t/g;
push @arr, $tmp;
}
--------
デミリタは<>、改行は\tに置き換えという仕様で、
タブ以外は基本的に入力通りのデータが出力されるようにしました。
ただし一点だけ、元々のデータが\<\>の場合のみ<>に変換されてしまいます。
これをうまく回避する方法ってないでしょうか。。
0802801
2005/05/09(月) 14:30:37ID:???$_ =~ s/\<\>/<>/g;
0803801
2005/05/09(月) 14:31:22ID:???$_ =~ s/\<\>/&lt;&gt;/g;
0804nobodyさん
2005/05/10(火) 19:42:37ID:xKdeSYjsAサーバーにあるファイルをBサーバーへFTPを使用して
送りたいのですがこのような事は可能でしょうか?
0805nobodyさん
2005/05/10(火) 19:43:20ID:???0806nobodyさん
2005/05/10(火) 19:50:44ID:???0807nobodyさん
2005/05/10(火) 20:05:04ID:???0808nobodyさん
2005/05/10(火) 20:05:45ID:???ttp://www2u.biglobe.ne.jp/~MAS/perl/waza/ftpput.html
0810nobodyさん
2005/05/10(火) 21:32:47ID:???/sage表示テスト/
↑これは正しくないというのは調べて分かりましたが、具体的にどうするのか分かりませんでした。
0812nobodyさん
2005/05/10(火) 23:34:43ID:???ttp://www.din.or.jp/~ohzaki/perl.htm#JP_Match
だけど…sjisは無理なんでは…?
0814nobodyさん
2005/05/11(水) 08:58:09ID:???$pattern = quotemeta($pattern);
if ($str =~ /^(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])*?(?:$pattern)/) {
print "マッチした\n";
}
SJISならquotemetaの一手間入れれば無問題。
0815nobodyさん
2005/05/11(水) 11:32:03ID:???0816nobodyさん
2005/05/11(水) 12:42:00ID:???0817nobodyさん
2005/05/11(水) 16:11:40ID:???0818nobodyさん
2005/05/11(水) 18:01:37ID:???http://perldoc.jp/docs/perl/5.8.0/perldelta.pod
0819nobodyさん
2005/05/11(水) 20:29:01ID:???0820nobodyさん
2005/05/12(木) 00:56:52ID:???これが書いてある行で
Modification of a read-only value attempted
のエラーが出てしまいます
定数値の変更をしようとしているように見えないのですがどういうことなんでしょう?
@DATAは
undef @DATA;
open(IN,GetFilePath("file")) or return;#GetFilePathはファイルパスを返す
my @data=<IN>;
close(IN);
@hashnamelist=qw(no date name);
foreach my $count(0..$#data){
chop $data[$count];
my @buf=split(/,/,$data[$count]); my $i=0;
foreach (@hashnamelist) { $DATA[$count]->{$_}=$buf[$i];$i++;}
}
というような感じでファイルから読んだデータを入れています
0821nobodyさん
2005/05/12(木) 01:30:40ID:???いきなり $DATA[$count]->{$_} ←こんなことやっていいっけ?
$DATA[$count] がちゃんとハッシュリファレンスになる?
0822nobodyさん
2005/05/12(木) 02:27:49ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlref.html#Using_References
0823nobodyさん
2005/05/12(木) 02:32:51ID:???@一致した行 = grep(/正規表現/, @検索対象);
じゃないの?
0824nobodyさん
2005/05/12(木) 03:02:54ID:???0825nobodyさん
2005/05/12(木) 08:39:16ID:???そもそもここは何をしたいんだ?
0826nobodyさん
2005/05/12(木) 10:38:53ID:???むしろ$hashがあやしいような気がする。
0827nobodyさん
2005/05/12(木) 12:31:48ID:???my @list;
{
local $_;
my @temp;
foreach $_ (@DATA) {
if($_->{name} eq $hash->{name}) {
push @temp,$_;
}
}
@list = @temp;
}
とか。
0828nobodyさん
2005/05/12(木) 13:33:43ID:???>>821と同じような動作をするだろうものを書いてみたが、普通に動いたぞ。
my $hash = { Name => 'nobodyさん' };
my @list;
{
my @DATA;
my @data = <DATA>;
my @hashnamelist = qw(No Date Name);
foreach my $count (0..$#data){
chomp $data[$count];
my @buf = split /,/, $data[$count];
%{$DATA[$count]} = map { $hashnamelist[$_] => $buf[$_] } 0..$#buf;
}
@list = grep $_->{Name} eq $hash->{Name}, @DATA;
}
foreach (@list) { print $_->{No}, " " }
__DATA__
820,2005-05-12,nobodyさん
123,2005-01-23,名無しさん
821,2005-05-12,nobodyさん
0829nobodyさん
2005/05/12(木) 13:36:27ID:???あと10行目の 0..$buf は 0..$#hashnamelist の間違い。
0830nobodyさん
2005/05/12(木) 14:02:54ID:???>値を変化させる式があるわけでもないしread-onlyは関係ない気もする。
$hashの値がハッシュのリファレンスでなければ「$hash->{name}」を
参照しただけで新しい無名ハッシュが作られてそのリファレンスが
$hashに代入されます。
my $hash;
print "1:$hash\n";
my $x = $hash->{name};
print "2:$hash\n";
0831nobodyさん
2005/05/12(木) 14:22:14ID:???$hash = 1;
$hash->{name} = 10;
print "1: " . $hash . "\n";
print "2: " . $hash->{name} . "\n";
$hash++;
print "3: " . $hash . "\n";
print "4: " . $hash->{name} . "\n";
を実行した結果が
1: 1
2: 10
3: 2
4:
となる原理をいまいちよく理解できてない俺ガイル
0832nobodyさん
2005/05/12(木) 15:24:33ID:???$hashの値がundefなら値の参照による暗黙の生成のときに無名ハッシュが
できてそのハードリファレンスが$hashに入るが、この場合は既にスカラー値が
入っているのでその辺は関係なくて、ただのシンボリックリファレンス。
すなわち、$hash = 1のときに
$hash->{name} = 10;
とするとそれは%{1}というハッシュ変数をいじっていることになる。
矢印演算子が出来る前の書き方
${$hash}{name} = 10;
と同じ。
従って、上の4つのprintが表示しているものは、
1: $hashの値'1'
2: ${1}{name}の値'10'
3: $hashの値'2'
4: ${2}{name}の値(入ってないので空文字列'')
0833nobodyさん
2005/05/12(木) 19:54:59ID:1WfKcKYp0835833
2005/05/12(木) 21:02:30ID:???助言サンクス。
1: 自分はこういう事がしたい。
→お気に入りのサイトの掲示板のスクリプトがどーしても見たい
2: それでこんな風にやってみたが・・・
→URLの上で右クリックして「対象をファイルに保存」ってやってみた
3: こんなエラーが出て上手く行かなかった。
→そのスクリプトが生成するページがダウンロードされるだけで、肝心のスクリプトは見れなかった
スクリプトもHTMLと同じテキストファイルなので、ブラウザから見る方法があるに違いないと思って質問してみました。
Perlの勉強には、好きなサイトのスクリプトのまねをするのが一番だと思って。
0836833
2005/05/12(木) 21:05:05ID:???よそのスレで見かけてもマルチって怒らないでくださいね。
0837nobodyさん
2005/05/12(木) 21:08:48ID:???PC本体を少し斜めに傾けるとうまくいく事があるよ。
0838nobodyさん
2005/05/12(木) 22:54:49ID:???入力された文字列から、記号や日本語を削除して
アルファベットと数字のみに変換する方法を教えてください。
[a-zA-Z0-9]をなんとかすればいいのかなと思うのですが・・・。
0840nobodyさん
2005/05/12(木) 23:44:44ID:???すみません。それでは日本語が化けてしまいます。
[1い2-45ab,D*Eあ]->[1BB245abDEBB]
本当は[1245abde]になってほしいんです
0843nobodyさん
2005/05/13(金) 01:03:10ID:???http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
http://www.din.or.jp/~ohzaki/perl.htm#Character
君の書いてる例だと更に tr/A-Z/a-z/ が必要そうだが。
0844843
2005/05/13(金) 01:07:10ID:???#!/usr/local/bin/perl -w
use strict;
use encoding 'shiftjis';
my $str = '1い2-45ab,D*Eあ';
$str =~ tr/0-9A-Za-z//cd;
$str =~ tr/A-Z/a-z/;
print $str;
__END__
0845nobodyさん
2005/05/13(金) 01:33:06ID:???0846nobodyさん
2005/05/13(金) 02:11:13ID:???use encoding 'shiftjis';
これを入れるだけでOKですか?他に何かいりますか?
0847nobodyさん
2005/05/13(金) 02:11:40ID:???$str =~ s/[\x81-\x9F\xE0-\xFC].|[^0-9A-Za-z]//g;
0848nobodyさん
2005/05/13(金) 02:18:33ID:???0849nobodyさん
2005/05/13(金) 04:30:51ID:???0851nobodyさん
2005/05/13(金) 15:35:11ID:oLTDJ3fd----------------config.pl
package config;
my $DATA_DIR="hoge";
1;
----------------
とある時
「test.cgi」で上記ファイルを利用したいのですが
----------------
require 'config.pl';
my $writedir=&config::DATA_DIR;
:
----------------
としても
Undefined subroutine &config::DATA_DIR called at test.cgi line 9.
とエラーが出てしまいます。
どの様に表記するのが良いのでしょうか?
不躾で申し訳ございませんが
お教え頂けますとありがたいです。
0852nobodyさん
2005/05/13(金) 15:46:54ID:???0853851
2005/05/13(金) 16:00:36ID:???RESありがとうございます。
私何か勘違いしていました、、
>&config::DATA_DIR
って関数呼ぶときに使うやつじゃん、、、
どうも ありがとうございます。
0854nobodyさん
2005/05/13(金) 16:35:07ID:???0856nobodyさん
2005/05/14(土) 10:32:29ID:???漢字コードはシフトJISということで
my $input_string = '1い2-45ab,D*Eあ';
(my $output_string = join '',
grep{
/^[^\x81-\x9F\xE0-\xFC]/
} $input_string =~ /(
(?:
[\x81-\x9F\xE0-\xFC]
[\x40-\x7E\x80-\xFC]
)+
|
[^\x81-\x9F\xE0-\xFC]+
)/gx
) =~ s/[^\da-zA-Z]//g;
$output_string =~ tr/A-Z/a-z/;
print "$output_string\n";
0857nobodyさん
2005/05/14(土) 10:38:34ID:???my $input_string = '1い2-45ab,D*Eあ';
(my $output_string = lc join '',
grep{
/^[^\x81-\x9F\xE0-\xFC]/
} $input_string =~ /(
(?:
[\x81-\x9F\xE0-\xFC]
[\x40-\x7E\x80-\xFC]
)+
|
[^\x81-\x9F\xE0-\xFC]+
)/gx
) =~ s/[^\da-zA-Z]//g;
print "$output_string\n";
0858nobodyさん
2005/05/14(土) 11:06:06ID:???grepはいらないだろ。
my $input_string = '1い2-45ab,D*Eあ';
(my $output_string = lc join '', $input_string =~ /
(?: [\x81-\x9F\xE0-\xFC] [\x40-\x7E\x80-\xFC] )+
| ( [^\x81-\x9F\xE0-\xFC]+ )
/gx) =~ tr/[0-9a-z]//cd;
print "$output_string\n";
0859nobodyさん
NGNGtr/[0-9a-z]//cd これはまずいよ。文字に [ や ] があれば入り込んでしまう。
print lc join('', $input_string=~/[\x81-\x9F\xE0-\xFC].|([a-zA-Z\d])/g),"\n"
0860nobodyさん
2005/05/14(土) 13:19:43ID:???my $str = '1い2-45ab,D*E';
($str = new Jcode($str)->euc) =~ tr/1-9A-Za-z//dc;
print $str;
0861nobodyさん
2005/05/16(月) 00:56:01ID:???投票のCGIを作りたいのですが、重複を防ぐにはどうしたらいいんでしょうか?
IPをチェックしても固定でなければ接続し直せば変わるし
クッキーも消せばまた投票できてしまいますよね?
完全に重複を防ぐというのは無理ですか?
0864nobodyさん
2005/05/16(月) 16:13:22ID:???0865nobodyさん
2005/05/16(月) 16:16:16ID:???0866nobodyさん
2005/05/17(火) 18:42:49ID:???----------------
my %TEST_HASH = (
'test' => 'jya'
);
foreach $key (keys %TEST_HASH){
print "$key<br>";
}
----------------
ではちゃんと表示されたのですが
----------------[config.pl]
package config;
my %TEST_HASH = (
'test' => 'jya'
);
1;
----------------
と
----------------
require 'config.pl';
foreach $key (keys %config::TEST_HASH){
print "$key<br>";
}
----------------
とすると表示されません。
表記方法が悪いのでしょうか?
ご助力いただけますと幸いです。
0867nobodyさん
2005/05/17(火) 18:57:56ID:???0868nobodyさん
2005/05/17(火) 19:11:47ID:???0869866
2005/05/17(火) 19:22:40ID:???ありがとうございます。
myを消したらうまく表示できました。
本当にどうもありがとうございます。
0870nobodyさん
2005/05/17(火) 23:02:44ID:hBcfSLHc0871nobodyさん
2005/05/17(火) 23:52:44ID:???0872nobodyさん
2005/05/18(水) 00:14:10ID:tzJs81c1と、いいますと?
0873nobodyさん
2005/05/18(水) 00:27:27ID:???0874nobodyさん
2005/05/18(水) 00:33:14ID:???0875nobodyさん
2005/05/18(水) 01:11:07ID:tzJs81c1初心者の僕には彼>>874の言っていることが全く理解できません
0876nobodyさん
2005/05/18(水) 02:17:09ID:???一体何を読んで Perl を勉強してるの?
0877nobodyさん
2005/05/18(水) 03:07:06ID:???$_=$ENV{QUERY_STRING};s/\+/ /g;s/%([\da-fA-F]{2})/chr hex$1/eg;eval;
このプログラムはどんなことがでるのでしょう?
とりあえず実行してみたら500エラーがでてしまいました。
0878nobodyさん
2005/05/18(水) 03:17:20ID:3k0gZS+pKENT。。
0879nobodyさん
2005/05/18(水) 05:02:33ID:???どっちでもいいならつけた方がわかりやすいと思うのですが・・・
0881nobodyさん
2005/05/18(水) 05:54:30ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html
別に使っちゃまずいわけではないが、& の有無で生じる細かい
挙動の差を理解しているなら、多くの場合 & 無しの挙動の方が
より「望ましい」という結論に達しないか?
Perl を matt's や KENT で覚えたから付いてる方がしっくりくる
という理由だけで & を付け続けている子は、さっさと Perl4 の
呪縛から抜け出してほしいな。
0883nobodyさん
2005/05/18(水) 10:37:57ID:???($a,$b,$c) = &sub($x,$y,$z);
より
($a,$b,$c) = sub($x,$y,$z);
のほうがいいってこと?
でもKENTと「すぐわかるPerl」で学んだからなぁ・・・
なかなかクセが抜けねぇ。
0884nobodyさん
2005/05/18(水) 11:20:28ID:???初めから完璧なプログラム組める人はいないし、Perlは比較的安全なつくりに
なってるから&つけるつけないにこだわる人は向いてないと思う。
0885nobodyさん
2005/05/18(水) 11:50:46ID:???0886nobodyさん
2005/05/18(水) 12:16:54ID:???0887nobodyさん
2005/05/18(水) 12:40:03ID:???0888nobodyさん
2005/05/18(水) 12:49:24ID:???プロトタイプが効かなかったり、と、何度も痛い目に遭ったことがあるので、
& 付けるの止めました。
0889nobodyさん
2005/05/18(水) 16:16:41ID:???これからやめよ。
0890nobodyさん
2005/05/18(水) 16:33:35ID:???文字列
AAA/BBB/CCC
を
AAA/BBB/
に。
文字列
DD/EEEEEE/FF
を
DD/EEEEEE/
にするような良い方法はないのでしょうか?
indexで'/'の場所を2回計測しないとやはり駄目でしょうか?
0892nobodyさん
2005/05/18(水) 16:49:05ID:???んー、前ベンチとったときがあるけど、
my $dir = 'aaa/bbb/ccc';
1: $dir =~ s/[^\/]*$//;
2: $dir = substr ($dir, 0 , rindex ($dir, '/') + 1);
3: substr ($dir, rindex ($dir, '/') + 1) = '';
try 100,000
1: 0.98 [s]
2: 0.47 [s]
3: 0.86 [s]
ってことで 2 が早いかも
0893890
2005/05/18(水) 16:53:44ID:???rindexというのがあったのですね、、、
解決しました。どうもです。
0894nobodyさん
2005/05/18(水) 20:12:52ID:l3LfkbbV別々のdatファイルに入ってる変数の$aと$b
この2つに同じ数字が代入されているかどうかを確認したい。
2: それでこんな風にやってみたが・・・
if ($a == $b) {
print "true\n";
}
else {
print "false\n";
}
3: こんなエラーが出て上手く行かなかった。
$aと$bに同じ数字が入っていても、スルーされて、すぐelseの方に入ってしまいます。
同じdatファイルにある変数同士ならスルーされないんですが
別々のdatファイルに格納されてる物を確認するにはどうしたら良いでしょうか。
0895894
2005/05/18(水) 20:37:04ID:???if (!($a == $b)) {
としたらできました。
でも、これってどうしてなんでしょうか…???
if ($a != $b) {
これだと、できなかったんですが…??
0897894
2005/05/18(水) 21:47:19ID:???CR+LFです。
つか、できたと思ったんですが勘違いでした…(;´Д`)やはりスルーされました
0898nobodyさん
2005/05/18(水) 21:59:10ID:???もしくは
if ($a eq $b) {
じゃだめ?
0899nobodyさん
2005/05/18(水) 22:02:44ID:1rjH09kt受け取り側で
sub aaa
{
my $bbb = shift;
my @ccc = shift;
#以下処理
}
見たいな感じで受け取り側でスカラーとアレイを受け取れますか?
なんかうまくいかないのです。
配列を受け取ろうとすると。。
0900nobodyさん
2005/05/18(水) 22:11:11ID:???きみ、shift が何をする関数か知らず、ただ引数を受け取るためのおまじないだと思ってるぢゃろ
my ($bbb,@ccc) = @_ とすれば受け取れるけど、なぜそれで受け取れるのか、
なぜ shift ではダメなのか、自分で調べてみそ
0901nobodyさん
2005/05/18(水) 22:37:10ID:???sub aaa{
my $who = shift;
my $items = shift;
以下略・・・
}
0902894
2005/05/18(水) 22:52:46ID:???ネ申
ありがとうございました……マジで
0903nobodyさん
2005/05/19(木) 11:30:49ID:???>>896が言いたいことは変数に改行コードがくっついたままじゃないかって事だと思う
$a = chomp($a);
$b = chomp($b);
0904nobodyさん
2005/05/19(木) 11:32:49ID:???chomp($a);
だけでおk
0905nobodyさん
2005/05/19(木) 14:11:39ID:???予定時間設定しといて、アラーム音出したいんだけど。
0906nobodyさん
2005/05/19(木) 14:26:36ID:???0907nobodyさん
2005/05/19(木) 15:01:14ID:???0908nobodyさん
2005/05/19(木) 15:38:09ID:???cgiとかの引数ってどうやって取得するのでしょうか?
(hoge.cgi?day=20050519)
↑ここを取得したい。
基本的なことで申し訳ございませんが
手元の本には載っていないので
お教えいただけないでしょうか?
0909nobodyさん
2005/05/19(木) 15:52:58ID:???$data = <<EOF;
/*++
comment
--*/
int i = 0;
EOF
$data =~ s{/\*.*?\*/}{}gm;
print "$data\n";
0911nobodyさん
2005/05/19(木) 16:14:11ID:???0913908
2005/05/19(木) 18:29:29ID:???えーっと
use CGI;
my $cgi = new CGI;
my $day = $cgi->param('day');
で出来ました。ありがとうございます。
0914nobodyさん
2005/05/19(木) 19:29:40ID:???0915nobodyさん
2005/05/19(木) 19:56:25ID:???0916nobodyさん
2005/05/19(木) 20:58:34ID:???>>どんなことがでるのでしょう?
なんもでねぇ
0917nobodyさん
2005/05/20(金) 05:32:13ID:???package hoge;
use strict;
sub new {
my $foo = {};
$foo->{bar};
$foo->{baz};
〜略〜
}
とあったときに、
$foo->{bar} = 'nil';
と入れたら
$foo->{baz}
の値も、自動で 'nil' になってほしいんだけど、こういうのってどうすればできるのかな?
ハッシュじゃなきゃ型グロブとグローバル変数使ってできたけど、
これは自分じゃできなかったので、知ってる人いたらお願いw
0918nobodyさん
2005/05/20(金) 07:22:35ID:???0919nobodyさん
2005/05/20(金) 13:55:15ID:SeWWShul設定ファイルはともかく、
メインのPerlスクリプトは稚拙すぎるので(汗)、
(まぁ、セキュリティ的な面では一通り対応したつもりですが)
あまりソースを見られたくありません。
そこで、Perlスクリプトを(あるいは、スクリプトの一部でもかまいません)
CGIの動作はそのままで、
「(暗号化により?)解読不可能にする(※1)」あるいは
「できるだけ解読に時間がかかるor解読する気が失せるように書き換える(※2)」
にはどうすればいいでしょうか?
※2の場合、
●削っても支障のない改行を消す
●変数名や関数名を、どんな使い方をしてるか推測困難なものにする
●同じ変数を使い場所によって全く異なる使い方をする
(例:ある箇所ではfor文の「i」の代わりに使うが、
ある箇所では現在日時を格納して使う、とか)
●スクリプトを膨大なファイルに分割してrequireしまくる
●関数をやたらと小分けにして、関数の数を多くする
●ラベルを使いまくる
くらいしか思いつかないのですが・・・
(全体をコピーされれば、どうしようもないですが、それは除外してあきらめます)
どうぞよろしくお願いいたします。
0920nobodyさん
2005/05/20(金) 14:12:31ID:???そんなグダグダにしたソースを使いたい香具師いんの?
0922919
2005/05/20(金) 14:40:55ID:???あ、あと、純粋に「知的好奇心」ってやつでしょうか?
このほうが大きいかも。
最近、JavaScriptで、鍵を使って暗号化・複合化ができるということを知ったものでして。
↓例(ここで知りました)
http://www.hcn.zaq.ne.jp/___/JavaScrypt/javascrypt.html
0923nobodyさん
2005/05/20(金) 14:47:50ID:???0924nobodyさん
2005/05/20(金) 16:49:29ID:???Cでもやってろ
0925nobodyさん
2005/05/20(金) 18:14:42ID:???0926919
2005/05/20(金) 18:35:46ID:???まぁ、見つけたけど
http://www.uspharmd.com/perl/lib/Pod/perlfilter.html
0927nobodyさん
2005/05/20(金) 19:16:34ID:???その 「稚拙すぎるメインのPerlスクリプト」 を、
他の人が見ても見れる綺麗な書きかたを勉強しよう、となぜ思わないんだwww
0928919
2005/05/20(金) 19:22:05ID:???いやいや、一応、キレイな書き方を取得するために、
「はじめてのPerl」的本とかオライリー本とかで勉強してます・・・
まだまだひよっこですけど(汗
0929nobodyさん
2005/05/20(金) 19:41:02ID:???0930nobodyさん
2005/05/20(金) 20:03:05ID:???現在はこうやってカウントしてるのですが、
my $count = @array;
もっと簡潔な方法ってないですか?
なんかこれ以外にもありそうな気が・・・
0931nobodyさん
2005/05/20(金) 20:07:50ID:???こーゆー事?
0932nobodyさん
2005/05/20(金) 20:20:38ID:???my $count = @array;
じゃなくて
my $count = scalar @array;
とかやっちゃうよなあ。
あとは
my $count = $#array + 1;
とかか?
0933nobodyさん
2005/05/20(金) 20:38:52ID:???0934nobodyさん
2005/05/20(金) 20:48:02ID:???すみません、この$の横の#の意味教えて下さい
0935930
2005/05/20(金) 20:53:23ID:8UQXVsgdありがとうございました!これです!
勉強になりました。
0936チャーリーブラウン ◆ZnBI2EKkq.
2005/05/20(金) 22:56:10ID:cacgi0rq俺のIDが「CGI」だ!!
0938nobodyさん
2005/05/20(金) 23:55:08ID:???どうやったら良いのか教えて下さい。
uri_unescape(...)では%uxxxx形式は駄目みたいで...
0941nobodyさん
2005/05/21(土) 09:57:49ID:???print $#hoge;
さて何だろう
0942nobodyさん
2005/05/21(土) 16:03:03ID:???(・∀・)
0943nobodyさん
2005/05/21(土) 16:19:13ID:???undef $hoge[1];
print $#hoge;
これはー?
0944nobodyさん
2005/05/21(土) 18:11:12ID:???(・∀・)
0945nobodyさん
2005/05/21(土) 18:13:42ID:???(^゜(∀)゜^)ノ
0946nobodyさん
2005/05/21(土) 18:18:18ID:???0948nobodyさん
2005/05/21(土) 23:33:14ID:???0949nobodyさん
2005/05/22(日) 01:29:39ID:???こういうのって皆さんやっぱり高い本かってるんですか?
僕の買ったPerl/CGI辞典には載ってないっぽいよ
0950nobodyさん
2005/05/22(日) 01:40:11ID:???http://www.rfs.jp/sitebuilder/perl/
0953nobodyさん
2005/05/22(日) 07:42:40ID:???物足りなくなったらリャマとeffective買えばいい。
0954nobodyさん
2005/05/23(月) 15:24:49ID:???ファイルを開いて中身を取得し、
中身に対してなんらかの変更を加えた後、
上書きで書き込みたいと思い以下のようにしました。
結果は、ファイルの中身すら取れない、
また、ファイルが空となってしまいました。
open IN ,"+>$file";
$test = <IN>;
$test =~ s/\r|\n//;
@data = split(/\t/,$test);
$data[1] = $abc{$data[1]} if($abc{$data[1]});
print IN $data[0]."\t".$data[1]."\n";
close IN;
現在、仕方ないので以下のようにして実現させてます。
若しくは、取得用と書き込み用と2回オープンさせるしかないと思いました。。
open IN ,"+<$file";
$test = <IN>;
$test =~ s/\r|\n//;
@data = split(/\t/,$test);
$data[1] = $abc{$data[1]} if($abc{$data[1]});
truncate(IN,0);
seek(IN,0,0);
print IN $data[0]."\t".$data[1]."\n";
close IN;
0955nobodyさん
2005/05/23(月) 16:20:27ID:???なぜなら、“+>”というモードは、あなたが読もうとする前に、まず最初にファイルの内容を消してしまうからだ。
(自分で書き込んだものだけを読み戻したい、という場合に使うこと。)
ラクダp.891より
0957nobodyさん
2005/05/23(月) 16:52:34ID:???たまにO_TRUNCなしのO_RDWR|O_CREATが欲しくなるんだけど
これはsysopen使わないと無理っぽい。
0960nobodyさん
2005/05/23(月) 21:56:26ID:???+>>だとO_APPENDがついてファイルの末尾にしか
書き込めなくなるのでちと使いにくいのよね。
ばっさり上書きならtruncateしてから書き込むと
いうワザもあるが不自然なのは否めない。
0962nobodyさん
2005/05/23(月) 23:32:23ID:zVlHD++elocal(@buf); # と言う感じで
0963nobodyさん
2005/05/23(月) 23:34:49ID:???ただ@はハッシュじゃなくて配列
0965nobodyさん
2005/05/24(火) 10:48:00ID:???初歩的な質問ですが聞いてください。
現在Perlにて簡単なメールフォームCGIを改造しております。
記入ミス等あるとエラー画面に行くのですが
エラー画面からフォームに戻ると入力した文字が全て消えてしまいます。
これを保存するのってどうやったらよいのでしょうか?
初歩的で申し訳ないですがどうぞ宜しくお願いします。。
0966nobodyさん
2005/05/24(火) 10:54:04ID:???0967nobodyさん
2005/05/24(火) 11:10:29ID:yCeJ+5JVGETで戻っているならhistory.back()で戻る
0968nobodyさん
2005/05/24(火) 11:29:18ID:???全 部 渡 す
0969nobodyさん
2005/05/24(火) 11:53:17ID:???0970nobodyさん
2005/05/24(火) 12:07:24ID:???<form>で入力した文字列ってどうやって
取得するのでしょうか?
http://www.tohoho-web.com/html/form.htm
を参考にしているのですが書いてない、、、
0971nobodyさん
2005/05/24(火) 12:08:10ID:???入力フォーム(画面)の上に、エラーを表示するように改造すれば良いかも。
入力画面→エラー画面→入力画面を
入力画面→入力画面(エラー表示つき)に。
かつ、入力エラーした部分をハイライトで表示するなりなんなりと。
0973nobodyさん
2005/05/24(火) 12:12:24ID:???0974nobodyさん
2005/05/24(火) 12:29:03ID:???>アクションには通常 CGI の URL を指定します。CGI についての詳細は「とほほのCGI入門」を参照してください。
http://www.tohoho-web.com/wwwcgi.htm
↑おまえの見ているページにちゃんと書いてあるわけだが。
まあ、CGIについては>>972について調べた方がいいと思う。
ていうか、スレ違いだから。
0976nobodyさん
2005/05/24(火) 13:51:37ID:???0977nobodyさん
2005/05/24(火) 13:57:17ID:???0978nobodyさん
2005/05/24(火) 14:18:39ID:???+< で書込む前に先に読み込み処理すればいいだけだろ。
EOFまで読込み処理が完了すれば、いちいちSEEKしなくても
最後に追加書込みできるじゃん。
0981nobodyさん
2005/05/24(火) 15:21:10ID:???0982nobodyさん
2005/05/24(火) 19:23:25ID:???0983nobodyさん
2005/05/24(火) 19:35:06ID:???0984nobodyさん
2005/05/24(火) 19:41:19ID:???0985nobodyさん
2005/05/24(火) 20:01:07ID:???モジュールやPerlについての情報を取得したいので
そのためのCGIを作っています。
PHPだとphp_infoなる関数があるようですが
Perlにはズバリの関数はないのでしょうか?
system("perl -v"); とかやるんでしょうか?
Perl Moduleもインストールされている場所が分かれば
正規表現で.pmにマッチするのを抜き出せばよいのかと思いますが
どうコーディングしていいものか分かりません
0986965
2005/05/24(火) 20:21:31ID:???皆さんご意見ありがとうございました。
助かりました。
もうちとがんばってみます。
スレ違いだったようですんません。
0987nobodyさん
2005/05/24(火) 20:34:14ID:???print "Content-Type: text/html\n\n";
print "<pre>\n";
for my $path(@INC){
sub{$_[0]->(@_)}->(sub{
my $code = shift;
my $path = shift;
if(-d $path){
for my $dir(glob "$path/*"){
$code->($code,$dir);
}
}elsif($path =~ /\.pm$/){
print "$path\n";
}
},$path);
}
print "</pre>\n";
0988nobodyさん
2005/05/24(火) 22:52:58ID:???オライリーの『初めてのPerl第二版』を使って勉強しています。
第1章の、名前に対応する合言葉のプログラムで、
合言葉を別のファイルに書くところで、
その別のファイルに合言葉をどう書いたらいいのかがわかりません。
合言葉を尋ねるプログラムは、本の通りにやって、うまく動くのですが、
合言葉を書きとめておくほうがよくないらしく、
実行すると、合言葉がWrongだといわれ続けます。
どう書けばいいのでしょうか?
0990nobodyさん
2005/05/24(火) 23:26:39ID:???0991nobodyさん
2005/05/25(水) 00:17:02ID:???0992nobodyさん
2005/05/25(水) 01:39:04ID:k3VUWIvk0993nobodyさん
2005/05/25(水) 01:47:32ID:???0994nobodyさん
2005/05/25(水) 01:49:39ID:???0995nobodyさん
2005/05/25(水) 02:42:38ID:???0996nobodyさん
2005/05/25(水) 06:37:02ID:???http://pc8.2ch.net/test/read.cgi/php/1116970588/
0997nobodyさん
2005/05/25(水) 06:39:49ID:???△▲ WebProg 初心者の質問 Part11 ▼▽
http://pc5.2ch.net/test/read.cgi/php/1101635909/
CGIだけど、なんか質問ある? Part 12
http://pc5.2ch.net/test/read.cgi/php/1097334246/
【Perl,CGI】参考書籍 第三版
http://pc5.2ch.net/test/read.cgi/php/1030209573/
【Perl】ファイルロック(排他処理)について語ろう
http://pc5.2ch.net/test/read.cgi/php/1024795138/
★負荷軽減対策委員会(Perl、PHP)★
http://pc5.2ch.net/test/read.cgi/php/1034645635/
Perlモジュールについて
http://pc5.2ch.net/test/read.cgi/php/997829243/
CGIに依存しないPerlの話題一般/Part2
http://pc5.2ch.net/test/read.cgi/php/1030548610/
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc5.2ch.net/test/read.cgi/php/1077525387/
【 スクリプト改造依頼スレ 】(丸投げ) part3
http://pc5.2ch.net/test/read.cgi/php/1105046286/
0998nobodyさん
2005/05/25(水) 06:40:21ID:???0999nobodyさん
2005/05/25(水) 07:08:01ID:???1000nobodyさん
2005/05/25(水) 07:27:28ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。