1 名前:nobodyさん mailto:sage [2011/09/09(金) 18:11:49.71 ID:???] Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 「コマンドの意味がわかんない」とかはマニュアル見ましょう。 回答者さんは何でも屋じゃありません。 1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。 お勧めサイトは >>2 以降 前スレ hibari.2ch.net/test/read.cgi/php/1295170172/
495 名前:nobodyさん mailto:sage [2012/02/08(水) 10:31:20.53 ID:???] >>494 perldoc.jp/docs/perl/5.10.1/perlfaq6.pod#How32can32I32pull32out32lines32between32two32patterns32that32are32themselves32on32different32lines63 my $protocol = qr/(?:https?|ftp)/; my $format = '<a href="%2$s">%1$s</a>' . "\n"; my $text = do { ... }; my @link; while ($text =~ m{<!-- link -->(.*?)<!-- /link -->}gs) { my $links = $1; push @link, sprintf $format, $1, $2 while $links =~ m{〜(.*?)〜.*?($protocol://[!#-;=?-\[\]_a-z~]+)}gos; } print @link;
496 名前:nobodyさん mailto:sage [2012/02/08(水) 12:09:45.01 ID:???] >>493 その割には「お前ら教えろ」で回答貰えたりするけどな2ch
497 名前:nobodyさん mailto:sage [2012/02/08(水) 23:05:10.70 ID:???] >>496 それはむしろネタとして受け入れられてしまうんだろうなw
498 名前:nobodyさん mailto:sage [2012/02/19(日) 12:41:02.48 ID:???] 私の働きが悪いせいか、私の物はほとんど買ってくれません。 下着は、妻と娘のお下がりです。 おまけに洋式トイレ、便座が上がってるとか、飛沫が飛んでるとか、いちいち五月蝿いんです。 おかげで、トイレは座ってするように強要され、もうブリーフの前、開ける必要が無いんだからと、私達のお下がりで十分でしょう。と、ここ何年も私の物は買ってくれません。 今では開き直って、ブラジャーもしています。 家に居る時は、娘のスカートを穿き、外出は娘のパンツ、ジーンズ穿いていきます。 娘は、始めは困惑していたが今では慣れ、何でも貸してくれます。 妻の洋服、パンツ、スカートはウエストがちょっときつい。 ストレッチの物は、勝手に着ています。
499 名前:nobodyさん mailto:sage [2012/02/19(日) 13:22:18.26 ID:???] cat >>498 > /dev/null
500 名前:nobodyさん mailto:sage [2012/02/19(日) 15:19:47.97 ID:???] next if $num == 498
501 名前:nobodyさん mailto:sage [2012/02/19(日) 17:53:14.70 ID:???] Global symbol "$num" requires explicit package name at >>500 line 1.
502 名前:nobodyさん mailto:sage [2012/02/19(日) 22:33:36.65 ID:???] どうせなら、>>498 は、そのカキコ内容を perl で記述すべし。
503 名前:nobodyさん mailto:sage [2012/02/20(月) 14:28:00.53 ID:???] use warnings; use utf8; use Corp; use Family; my $family = Family->new(); $family->husband('>>498 '); $family->wife('百合子(仮)'); $family->daughter('楓(仮)'); my $corp = Corp->new(); $corp->salaryCalculation(); $family->income($family->husband(), $corp->salary()); if($family->income($family->husband()) > 250000){ # トイレ my $toto = Toilet->new(); $toto->type('EU'); # JA or EU my $urine = $family->urine($family->husband()); # 小便をする $toto->urine($urine); if($toto->is_splash()){ $toto->forced_to_sit(1); } # トイレの用足しには座りを強制 # 下着 if($toto->forced_to_sit()){ $family->underwear($family->husband(), $family->underwear($family->wife()); } # 他の着衣 if($family->underwear($family->husband()) eq $family->underwear($family->wife())){ $family->brassiere($family->husband(), $family->brassiere($family->wife()); $family->skirt($family->husband(), $family->skirt($family->daughter()); $family->jeans($family->husband(), $family->jeans($family->daughter()); } }else{ $family->underwear($family->husband(), 'BOXER PANTS'); $family->brassiere($family->husband(), undef); $family->skirt($family->husband(), undef); $family->jeans($family->husband(), 'EDWIN'); } >>498 じゃないけど、これが限界っす>< 娘や妻への下着のセットは省いたw
504 名前:nobodyさん mailto:sage [2012/02/20(月) 14:29:13.01 ID:???] 収入がちゃんとある場合の下着で、ブラとスカートはちゃんと undef にしてるところを評価して欲しいですw
505 名前:nobodyさん mailto:sage [2012/02/20(月) 22:20:39.95 ID:???] わろた
506 名前:nobodyさん mailto:sage [2012/02/21(火) 10:11:33.62 ID:???] 修正 × $corp->salary() ○ $corp->salary($family->husband()) サラリーを得るのに名前を渡してなかった>< × if($family->income($family->husband()) > 250000){ ○ if($family->income($family->husband()) < 250000){ 不等号の向き間違えたw
507 名前:nobodyさん mailto:sage [2012/02/24(金) 16:30:51.95 ID:???] 初めまして。 RSSのデータから、日付時刻とタイトル、そのリンク先URLを一覧にして取得したいと考えています。 ・ブラウザに「取得」ボタンなどを表示し、それをクリックすることで最新の一覧を表示 ・以前に取得したものは取得しない 先ずは上記2点を実装したいです。 良い方法や参考サイトなどをご教示頂きたいです。 よろしくお願いいたします。
508 名前:nobodyさん mailto:sage [2012/02/24(金) 17:02:28.77 ID:???] >>507 >>1-2 こんなCGI探してます 23 kohada.2ch.net/test/read.cgi/php/1219654359/ 依頼されたツールを誰かが作るスレ kohada.2ch.net/test/read.cgi/php/1078997682/ 金出すからスクリプト作ってよvol.1 kohada.2ch.net/test/read.cgi/php/1150508106/ 自作CGIを評価するスレ kohada.2ch.net/test/read.cgi/php/1049514428/ 自分の作ったCGIスクリプトをデバッグするスレ kohada.2ch.net/test/read.cgi/php/1011174442/ kohada.2ch.net/test/read.cgi/php/1036141603/420-435
509 名前:nobodyさん mailto:sage [2012/02/24(金) 17:22:17.71 ID:???] >>508 最後のスレが役に立ちそうです。ありがとうございます。
510 名前:nobodyさん mailto:sage [2012/02/25(土) 00:54:16.96 ID:???] なぜマスコミは財務省の犬になるのか? 全国紙では唯一、増税批判の姿勢を取っていた産経新聞に、 昨夏、国税の税務調査が入った。 財務省にとって税務調査は言論統制の最強の武器で、 2009年には朝日、読売が申告漏れを指摘され、 それを機に朝日は増税礼賛へと傾斜し、 読売は財務省幹部の天下りを受け入れた経緯がある。 国税庁という「警察力」は、財務省の最強の武器なのです。 何しろ、徴税というのは「裁量範囲」が広い業務で、 調査官の「判断」により合法とされたり、 脱税とされたりしてしまうのです。 「去年はOKだったのに、今年は何でダメなんだ!」 といった事態は普通に起こります。
511 名前:nobodyさん mailto:sage [2012/02/25(土) 13:09:52.88 ID:???] 眞子様は素敵 まで読んだ
512 名前:nobodyさん mailto:sage [2012/02/27(月) 00:22:44.82 ID:???] 貞子は素敵 まで読んだ
513 名前:nobodyさん mailto:sage [2012/02/27(月) 00:26:08.69 ID:???] 素数 に見えた
514 名前:nobodyさん mailto:sage [2012/02/27(月) 00:46:41.84 ID:???] 素股
515 名前:nobodyさん mailto:sage [2012/02/27(月) 07:22:57.09 ID:???] 眞子様は素股!?
516 名前:nobodyさん mailto:sage [2012/02/27(月) 14:07:22.77 ID:???] 貞操は国家機密事項
517 名前:nobodyさん [2012/02/28(火) 00:06:11.43 ID:0AwG+yg0] 質問なのですがPerlでこういうサイトって作れますか? ttp://findrjp.com/formen/ これはPHPだと思うんですけど 作るとしたらelsifで作る感じでしょうか? こういうのってすぐ作れますか?
518 名前:nobodyさん mailto:sage [2012/02/28(火) 00:51:16.58 ID:???] お前には無理
519 名前:nobodyさん mailto:sage [2012/02/28(火) 00:59:39.36 ID:???] お前に出来たらチンパンジーでも出来るよ
520 名前:nobodyさん mailto:sage [2012/02/28(火) 01:10:42.34 ID:???] そうだねelsifさえ使いこなせれば簡単に作れるよ。でもelsifはかなり難しいから頑張ってね。
521 名前:nobodyさん [2012/02/28(火) 01:35:37.84 ID:0AwG+yg0] 皆様生暖かいコメントありがとうございます。 どうせテメーらにはできないんだろwwwww って挑発したらヒント教えてくれますか? elsifは分かります
522 名前:nobodyさん mailto:sage [2012/02/28(火) 10:18:18.70 ID:???] はいはいマルチマルチ。
523 名前:nobodyさん mailto:sage [2012/02/28(火) 14:34:14.89 ID:???] 実行中のスクリプトの場所に関して質問です。 スクリプト中で開くファイルはスクリプトのあるディレクトリのサブディレクトリに置いており、 全てフルパスで開くようにしています。 昨日初めて mod_perl を入れたところ、FindBin $Bin や Cwd が Apache のディレクトリになっています。 $ENV{'SCRIPT_FILENAME'} を使おうかと思ったのですが、デバッグでコンソールで実行することもあるため $ENV{'SCRIPT_FILENAME'} は使えません。 $0 では cron でも mod_perl でも CGI でもコンソールでも期待する値が得られました。 ./hoge.pl で実行して dirname($0) すると ./ 返ると書いてある場所もありますが、当方では 確認できませんでした。 そこで疑問に思ったのが、$0 を 100% 信用してもいいのか? ということです。 「他のプログラムにより強制的に書き換えられる」 という可能性は今は無しでお願いします。
524 名前:nobodyさん mailto:sage [2012/02/28(火) 14:46:37.42 ID:???] ちょっと勘違いがありました。 $0 は perl に与えられた path みたいですね。 HTTPd とかはフルパスを作って渡してくれてるっぽいけど、 コンソールではそうではない。 むぅ。。。
525 名前:nobodyさん mailto:sage [2012/02/29(水) 01:59:02.18 ID:???] mod_perl を導入してスクリプトが走るのが軽いからと F5 連打してたら Not a CODE reference 〜 っていうエラーが出た。 そのエラーが言う行は main(); としかやってないのに。。。
526 名前:nobodyさん mailto:sage [2012/02/29(水) 11:28:36.69 ID:???] mod_perlが返すパスも元を追えば$0を元に生成してたと思う
527 名前:nobodyさん mailto:sage [2012/03/02(金) 13:17:08.38 ID:???] すみません、Web制作板からこちらに飛ばされて来ました。 ユーザーによる新規会員登録後、そのユーザー毎にディレクトリを自動的に生成し、 ユーザディレクトリ毎に容量制限を割り当てたいのですが、可能なのでしょうか? ディレクトリを自動生成するところまではできています。
528 名前:nobodyさん mailto:sage [2012/03/02(金) 18:09:30.62 ID:???] ファイルが作成されようとする度に全ファイルサイズを得るか、 quota の導入。 quota を入れるなら、システムに実際にユーザーの作成が必要。
529 名前:nobodyさん mailto:sage [2012/03/03(土) 19:01:18.46 ID:???] if ( 現在使用サイズ + これから書き出すサイズ < 制限サイズ ) { ファイル書き込み 現在使用サイズを書いたファイルorDBを更新(現在使用サイズ+これから書き出すサイズ) } サイズ取得はuse bytes; $data_size = bytes::length($data); かな。
530 名前:nobodyさん mailto:sage [2012/03/03(土) 19:19:52.03 ID:???] $^0って何でしたっけ。 検索しにくくて、、、、こういうのどうやって探せばいいんでしょう。 perlvarになかったので特殊変数ではないっぽい
531 名前:nobodyさん mailto:sage [2012/03/03(土) 19:27:25.41 ID:???] 何でしたっけと言われても、少なくともPerlにおいては特殊変数ではないしそれ以外の何かの意味もない。
532 名前:nobodyさん mailto:sage [2012/03/04(日) 02:19:05.56 ID:???] $^O ならOS名なんだけどネ
533 名前:nobodyさん mailto:sage [2012/03/04(日) 12:49:16.62 ID:???] >>532 そんなのすぐ気づいたしw
534 名前:530 mailto:sage [2012/03/04(日) 17:01:24.24 ID:???] ありがとうございます、OS名でぐぐったらいろいろ出てきました。 ゼロじゃなくて大文字のオーだったんですね。 OS名ということはシステムからPerlに提供されているものだと思って、%ENVと同じところに記述されているはずって当たりをつけたら perlvarにありました。
535 名前:nobodyさん mailto:sage [2012/03/04(日) 20:39:47.27 ID:???] 531恥ずかしすぎだなw
536 名前:532 mailto:sage [2012/03/05(月) 05:40:34.80 ID:???] >>535 そんなことはない。$^0 は確かに特殊変数でもなんでもなかった訳だし。 ためしに$^0をプリントさせたらエラーで実行できなかったし。
537 名前:nobodyさん mailto:sage [2012/03/05(月) 22:13:10.43 ID:???] だが普通すぐ気づくだろう。
538 名前:nobodyさん mailto:sage [2012/03/06(火) 01:30:36.74 ID:???] 「普通すぐ気づく」なら530の質問は最初からされてない
539 名前:nobodyさん mailto:sage [2012/03/06(火) 01:42:56.66 ID:???] 荒らしはスルーで、、、
540 名前:nobodyさん mailto:sage [2012/03/06(火) 02:52:11.60 ID:???] >>538 なぜ? $^O が検索しにくいのは同じだろう?
541 名前:nobodyさん mailto:sage [2012/03/06(火) 02:56:51.45 ID:???] perlvarとは何だったのか
542 名前:nobodyさん [2012/03/06(火) 09:53:40.98 ID:zjKZlebn] 質問です、以下の最短マッチが機能しないっぽい? のですが、なぜでしょうか? コード(抜粋) $html =~ m!"(.*?)" class="Link88" href="/Models.aspx\?ModelID=$id"!s; print $1; 実行結果 (〜ごっそり省略) <a title="Loeka Creekside Fern Short Sleeve Jersey 2010 $htmlはLWPで拾ってきたHTMLです。数MBくらいあります。 パターンマッチ内の文字列 class="Link88"〜 というあたりはちゃんとマッチしているようですが、 少なくとも Loeka の左にある " が $1 に含まれちゃうのはおかしい気がします。 また不思議なことに、修飾子 /s を外すとちゃんと最短でマッチしてくれます。
543 名前:nobodyさん mailto:sage [2012/03/06(火) 10:29:35.15 ID:???] 再現可能なコードぐらい貼れ、どーせこうだろうが $html = q{<a href="b" id="a" class="Link88"}; $html =~ m!"(.*?)" class="Link88"!s; $html =~ m!"(.*?)" class="Link88"!; 最短ってのはマッチし始めてからが最短になるんであって、グループ内に"を含まないなんてルールはない つまり最初の"から class="Link88" ... の手前の"までがマッチするんだよ
544 名前:nobodyさん mailto:sage [2012/03/06(火) 10:46:58.66 ID:???] なるほど、左に向かって最短マッチはしてくれないんですね。 m!"(.*?)" class="Link88"! を m!"([^"]*?)" class="Link88"! に変えて解決しました、ありがとうございます。
545 名前:nobodyさん mailto:sage [2012/03/06(火) 12:52:17.96 ID:???] 質問が不親切、再現しようにもコードもない、質問者が何を求めているかを把握するにはこっちが質問を熟読して意図と本当にやりたいことを汲み取らなければならない、などという書き込みに神対応できる >>543 みたいな奴尊敬するわ。
546 名前:nobodyさん mailto:sage [2012/03/07(水) 23:13:16.91 ID:???] Kent Webさんからダウンロードしたpostmailの設置が上手くいかなくて困っています。 ttp://kueris.pro.tok2.com/postmail.html ↑これなんですが、ご覧の通り送信ボタンを押すとエラーが出てしまいます。 このエラーは、「Minimal.pm」がCGIフォルダ内に見つからない、という意味だと思うのですが、ちゃんとアップロードはできています。 以下、その他の詳細です。 ・check.cgiは問題なく機能しました。パーミッションも設定できています。 ・postmail.cgiのみを「cgi-bin」というフォルダに移動させました。 ・サーバーはTOK2という所をお借りしています。 ・エラーメッセージにある13行目辺りの内容はこんな感じです。↓ 9 # モジュール実行 10 use strict; 11 use CGI::Carp qw(fatalsToBrowser); 12 use lib './home/kueris/postmail-utf/lib'; 13 use CGI::Minimal; 14 use Jcode; よろしければお力をお貸しください。よろしくお願いします。
547 名前:nobodyさん mailto:sage [2012/03/07(水) 23:45:53.60 ID:???] use CGI::Minimal; ↓ use CGI; またエラーが出たらお越し下さい。
548 名前:546 mailto:sage [2012/03/08(木) 00:14:54.72 ID:???] >>547 様 ありがとうございます。お陰さまで、無事にそのエラーは解消されたです。 しかし、今度は別のエラーが発生しました。 ttp://kueris.pro.tok2.com/postmail.html ↑今はこのようになっています。 パスが違うのかと思い、色々変えてみましたが、効果はありませんでした。 メッセージにある20行辺りの内容は以下の通りです。↓ 19 # 設定ファイル認識 20 require './public_html/postmail-utf/init.cgi'; 21 my %cf = &init; 度々で申し訳ありません。 ですが、何卒よろしくお願いします。
549 名前:nobodyさん mailto:sage [2012/03/08(木) 09:26:25.31 ID:???] require "./init.cgi"; で OK
550 名前:546 mailto:sage [2012/03/08(木) 12:15:53.18 ID:???] >>549 様 ご回答ありがとうございます。 試してみましたが、相変わらず同様のエラーメッセージが表示されてしまいます。↓ ttp://kueris.pro.tok2.com/postmail.html init.cgi自体はちゃんとアップロードされているんですが…。
551 名前:nobodyさん mailto:sage [2012/03/08(木) 12:34:33.65 ID:???] init.cgiが@INCが示すディレクトリの中にあり、読める状態にあるかを確認
552 名前:nobodyさん mailto:sage [2012/03/08(木) 16:18:28.19 ID:??? BE:3622206896-PLT(12000)] そもそもTOK2でCGIをまともに動かそうなんて無茶なこと考えるなよ
553 名前:nobodyさん mailto:sage [2012/03/08(木) 17:31:49.63 ID:???] cwd でカレントディレクトリ表示させてみて CGI で動いてない気がしてきた
554 名前:nobodyさん mailto:sage [2012/03/09(金) 01:25:41.39 ID:???] 初歩すぎる質問で申し訳ありません。 今勉強中なのですが、 postデータ等をこれで変換すると言うのが良くあるのですが、 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; たしかにこれでうまくいきますし、また基本的な挙動も理解しています。 分からないのは、なぜpack("C", hex($1))/egで、問題無く動くのかということです。 具体的には、 @$1で渡されるのは1バイト分なのに、なぜちゃんと2バイト文字として変換されるのか? A%([a-fA-F0-9][a-fA-F0-9]の書式でなぜ半角文字が受け渡されるのか? B例えば”テ”はpostからデータを受け取った時には83eなのに、なぜ問題無く変換されるのか? C@にかぶりますが、なぜ(pack"c",***)で上手く動くのか? "c*"じゃないのに正常に動いてる。 また、$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/hex($1)/eg;で作った変数をそのままpack"c*",$value;としてもうまく動かないのに、なぜちゃんと動くのか? いろいろ調べたりしたのですが、よくわかりませんでした。
555 名前:nobodyさん mailto:sage [2012/03/09(金) 02:06:50.72 ID:???] >>554 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; でググれ。
556 名前:546 mailto:sage [2012/03/09(金) 02:23:40.92 ID:???] 皆様、ご回答いただき本当にありがとうございます。 >>551 様 確認しましたが、問題ありません。 init.cgiは確かに存在しているはずなのですが、認識されていないようです。 試しに、アップロードされたinit.cgiに直接アクセスしてみたところ、404エラーが表示されました。(つづりやパスは間違えておりません) 同じフォルダ内にある別のプログラムにはアクセスできるのですが……。 >>552 様 プロバイダによってCGIの設置しやすさは違うのてでしょうか? もしよろしければ、CGIが動きやすい所をご紹介していただけないでしょうか。 >>553 様 申し訳ありません。プログラミングの経験がない私には、「cwdでカレントディレクトリ表示」の意味がよくわかりません。 調べてみましたところ、これはperlにおけるコマンドのことなのでしょうか。 打ち込んでみましたが、上手く動作しませんでした。
557 名前:nobodyさん mailto:sage [2012/03/09(金) 02:58:21.99 ID:???] >>555 相当ぐぐったのですけど、「これで動く」「この処理はこう言う処理をしてる」と言う説明はありそれ自体はわかるのですが、 頭でイメージしたものだとどう考えてもエラーが起きるもしくは正しく動作しないはずなのに、「なぜこの書式で正しく動作してるのか?」と言う疑問の解決は見つかりませんでした。
558 名前:nobodyさん mailto:sage [2012/03/09(金) 03:20:04.43 ID:???] >>554 Perlより文字コードの勉強を先にすべきだな (1)〜(3)の疑問はそっち寄りだ
559 名前:nobodyさん mailto:sage [2012/03/09(金) 03:37:26.52 ID:???] >>556 KENT から落としてきて、 13行目:use CGI; 24行目と26行目をコメントアウトでとりあえず動くよ。 何も入力せずに 「送信する」 ボタンを押せば、動作してるのが確認できる。 www11.tok2.com/home/mikisama/postmail-utf/postmail.html ただし、これは貼らずにいられない。 Q.メールフォームを設置したいのですがsendmailは利用出来ますか? tok2.com/study/faq/04-07.html これ以上は スレチ (これ以上もクソも初めからスレチだが・・・) なので、改造スレの方へどうぞ。
560 名前:nobodyさん mailto:sage [2012/03/09(金) 03:45:25.88 ID:???] 文字で考えるな ただ単なるバイト列として考えればよろし。 今日は SJIS だと 8DA193FA という4バイト。 俺らが見てる 「今」 という文字は、コンピュータからしたら 「8DA1」 という並びのバイト列でしか無い。 そうゆう並びになったから、文字が見えるというだけだ。
561 名前:nobodyさん mailto:sage [2012/03/09(金) 11:31:58.89 ID:???] てst
562 名前:554 mailto:sage [2012/03/09(金) 13:02:31.68 ID:???] 説明が下手で申し訳ありません。 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;を3つに分解した場合、 例えば、”テストtestだよ”を下の形で出力すると $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/$1/g; 83e83X83gtest82BE82E6となります。これを$hexvalue = hex($value);に いれようとしたのですが上手くいきません。 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/hex($1)/eg;として出力すると 131e131X131gtest130190130230となり、これをpack("c*",131,e,131,X,131,g,t,e,s,t,130,190,130.230);としても当然上手くいきません。 ”test”部分は元々半角小文字なのでs/で式から弾かれてるからとわかったのですが、 カタカナ部分の2バイト目は半角英数混じりなのですがここをちゃんと変換してないようですしそう言うオプションも無いのに、なぜ上手くいくのだろう?とよくわかりません。 カタカナの2バイト目の変換はどこでどのように行っているのでしょうか? >>554 のCは、gで次々代入してるからそう言う事なんだろうか?となんとなくイメージ出来ましたが・・・・・
563 名前:nobodyさん mailto:sage [2012/03/09(金) 13:33:46.30 ID:???] まず自己矛盾していることに気づいていない糞さ >@$1で渡されるのは1バイト分なのに >C@にかぶりますが、なぜ(pack"c",***)で上手く動くのか? 1バイト分のデータ(0x00-0xFF)をpackしてるんだからC*ではなくC そして文字コードについて全く理解しようとしていない 「テ」の文字コードは「0x83 0x65」で、「e」の文字コードは「0x65」 だから「テ」をパーセントエンコードすると「%83e」であって 「%83」部分さえデコードすれば元の文字に戻るんだよ ああ壁殴りてぇ
564 名前:nobodyさん mailto:sage [2012/03/09(金) 14:03:28.44 ID:???] >>562 ポイントは3つ。 一つ目。 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; はURLデコードするための一文であるということ。 ”テストtestだよ” をURLエンコードすると ”%E3%83%86%E3%82%B9%E3%83%88test%E3%81%A0%E3%82%88”になる。(文字コードはUTF-8) これをデコードして”テストtestだよ”に戻すのがURLデコード。 つまり$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;という一文の役目。 URLエンコードってのは、例えば「テ」(0xe38386)だったら「%E3%83%86」に変換する。 URLデコートってのは、例えば「%E3%83%86」だったら「テ」(0xe38386)に変換する。 2つ目 正規表現のパターンマッチは一つずつ行われる。 $value="%E3%83%86%E3%82%B9%E3%83%88test%E3%81%A0%E3%82%88" に対して $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; をやると、 $1に"E3"が入った状態でpack("C", hex($1))が実行され、文字列"%E3"を0xE3に置換。 $1に"83"が入った状態でpack("C", hex($1))が実行され、文字列"%83"を0x83に置換。 $1に"86"が入った状態でpack("C", hex($1))が実行され、文字列"%86"を0x86に置換。 (以下略)・・・ だからhexやpackにまとめて”%E3%83%86%E3%82%B9%E3%83%88test%E3%81%A0%E3%82%88”入れようとするのは間違い。 3つ目 >なぜ上手くいくのだろう? 多くのマルチバイトな文字コードは、「漢字は○○から始まる」とか「ひらがなは××から始まる」っていうルールを持ってる。 だから半角英数とマルチバイト文字が混在しても問題ない。
565 名前:nobodyさん mailto:sage [2012/03/09(金) 14:16:43.38 ID:???] >>563 @とCはだいたいわかりました。ありがとうございます。 下の方は、pack("c*", 131,101);で”テ”になるのは理解しています。 ただhex($1の段階で131eと出力されてるみたいなので、普通に考えるとpack("c*", 131,c);と言う挙動をさせようとしてるように思えるのですが(当然これだと不具合が出ます)、特に修飾子があるわけでもないのになぜcを自動的に101に変換してるのかがわからないのです。
566 名前:nobodyさん mailto:sage [2012/03/09(金) 14:22:20.55 ID:???] >>565 >特に修飾子があるわけでもないのになぜcを自動的に101に変換してるのかがわからないのです。 「e」な。 そんでもってeの文字コードは10進の101。 >普通に考えるとpack("c*", 131,c);と言う挙動をさせようとしてるように思えるのですが なりません。 pack("C", 131)、pack("C", 101)が順番に動いている。
567 名前:nobodyさん mailto:sage [2012/03/09(金) 14:26:11.34 ID:???] >>564 だいぶよくわかりました。本当にありがとうございます。 一文にする事で内部的に自動的にルールで振り分けてるから厳密に考えようとしてもしょうがないと言う事なのでしょうか。 とすると、あの一文を@%を抜くA10進数に変換B文字コードに変換三段階に分けて記述しようとすると逆に自動では行われないのでかなり膨大な記述になるのでしょうか。 わかりやすくしようと同じ挙動をするものをちょっと書いてみようと思ったら配列を使ったりしないとうまくいかない感じでした。
568 名前:nobodyさん mailto:sage [2012/03/09(金) 14:35:01.38 ID:???] >>566 なるほど。 内部的にはeを101に自動的に変換して文字列を次々に処理してるのですね。 するとそこの部分だけを抜き出して分けて記述しようとすると、やはりeを101に変換させるコードを書かないといけないと言うことですね。
569 名前:nobodyさん mailto:sage [2012/03/09(金) 14:43:54.07 ID:???] すみません ようやく理解しました。 0x83の次にcが来るので”テ”になる $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;の中ではeは未処理のまま0x83をpackで変換した物の後ろに単純にくっつけて出力したと言うことですね ようやくわかりました。確かに文字コードの勉強が必要でした よく調べてみます 大変お騒がせしました
570 名前:546 mailto:sage [2012/03/09(金) 16:47:52.35 ID:???] >>559 様 ご回答ありがとうございます。 色々と見落としていた点があったようで、大変失礼致しました。 頂いた助言を元に、サーバーを変えて試してみます。 本当にありがとうございました。
571 名前:nobodyさん mailto:sage [2012/03/09(金) 21:37:28.29 ID:???] つか use CGI しているのにモジュール使っていないし、 use strict してても全然 strict じゃないw こんなの怖くて使えないよ('A`)
572 名前:nobodyさん mailto:sage [2012/03/10(土) 01:31:51.91 ID:???] ●やりたいこと: jpg画像のサムネイル作成(orファイルサイズ圧縮)がしたい。最悪トリミングでも レンタルサーバ上でサムネイル画像を作成したいと思っております。 GDやImage Magick、Imager、epeg等々が入っていないのですが、 何かうまい方法がありましたら教えていただきたいと存じます。 配置してパスを通すだけで使えそうなモジュールがありましたら・・
573 名前:nobodyさん mailto:sage [2012/03/10(土) 02:30:16.63 ID:???] まじめな話、KENT はやめとけ。 あれは20年前のシステムだ。
574 名前:nobodyさん mailto:sage [2012/03/10(土) 03:05:45.88 ID:???] >>572 width height
575 名前:nobodyさん mailto:sage [2012/03/10(土) 05:37:43.25 ID:???] >>574 主旨が画像を読み込むスピードを早くしたいので、widthheight指定だけではではちょっと・・
576 名前:nobodyさん mailto:sage [2012/03/10(土) 06:45:54.03 ID:???] ・画像を扱えるツール(プログラム)をレンサバにインストールする 画像を扱うPerlモジュールは大抵別途本体(バイナリ)かライブラリも同時にインストールされてる必要があるからね ・画像加工できる別サーバを用意し、画像ファイルをそちらのサーバに投げてサムネイルを作ってもらい、それをダウンロードする Image Magick じゃなくてImageMagick でもImageMagickも入ってないレンサバって今時あるの? 画像ファイルを(たぶん大量に)アップロードできるくらいだから最安でカスカスのレンサバってことでもないと思うんだが
577 名前:nobodyさん mailto:sage [2012/03/10(土) 08:45:04.67 ID:???] >>576 ありがとう。それらは考えたんだけど鯖分けるなら自分でサムネつくるのと 手間がかわらないのでなやんでる。 うん。ImageMagickはいってない。
578 名前:nobodyさん mailto:sage [2012/03/10(土) 10:20:44.99 ID:???] ほかのレンタルサーバーに移動すればよい。
579 名前:nobodyさん mailto:sage [2012/03/10(土) 12:27:16.79 ID:???] フリーなサーバならまだしも、金を払ってるレンタルサーバなら GD ぐらい入ってないの? perl が駄目でも、PHP で GD が動いてる可能性とかは?
580 名前:nobodyさん mailto:sage [2012/03/10(土) 18:41:09.72 ID:???] >>579 PHPでも組んでみたけどだめでした。 素直にさくらとかWebArenaSuiteX使うべきなんですが、 アプロダなのでちょっとアダルト要素入る可能性があり ピンク系も許可のレンタル鯖でないとだめかなというのもネックになってます。
581 名前:nobodyさん mailto:sage [2012/03/11(日) 00:39:52.43 ID:???] HTML解析で質問です。 HTML::TreeBuilderを使って解析をしているのですが、 どうしても <span class="hogehoge">fuga</span> の、fugaが取り出せません。 ($tree->look_down('class', 'hogehoge') ではダメなのでしょうか・・・?ご教授お願いしますm(_ _)m
582 名前:nobodyさん mailto:sage [2012/03/11(日) 09:53:46.90 ID:???] >>581 同じクラスのエレメントが複数あるとか?
583 名前:nobodyさん mailto:sage [2012/03/23(金) 00:48:00.36 ID:???] なかなか短いコードで再現できなくて申し訳ないのですが、 print "DEBUG1\n"; $html =~ m!<a title="([^"]*?)" class="Link88" href="/Models.aspx\?ModelID=$id" id="ModelLink\d+">.*?<td class="Label11">(.*?)</td>.*?<td class="Label14">(.*?)</td><td class="Label13".*? (\d+)%</td>!s; print "DEBUG2\n"; このm//の1行だけの処理に、20秒ほどかかることがまれに起きます。 その間 top(1)で見てるとCPU負荷が異常に跳ね上がります。 この行はループ中、LWPで取得するたび$htmlが変わりながら数百回実行されるのですが、 異常に時間がかかる時以外は瞬時に通り過ぎます。 時間がかかる時の $htmlを試しにファイルに吐かせてみましたが、 サイズはせいぜい500KBほどで、 このときのファイルを上記の行だけのテストスクリプトに食わせても 瞬時に終了し異常が再現できません。 原因と対策に何か考えられることはあるでしょうか?
584 名前:nobodyさん mailto:sage [2012/03/23(金) 01:14:12.71 ID:???] >>583 メモリスワップが発生してるとか。
585 名前:nobodyさん [2012/03/23(金) 04:21:38.62 ID:SsskDSLS] 質問です。 Perl/CGI側でHTTPのエラーコードを返そうと思います。 #!/usr/bin/perl print "Status: 404 Not Found\n"; exit; というコードを書いたとき、ブラウザ上では想定通りに404エラーとして表示されるのですが Apacheのエラーログを見てみると Premature end of script headers: /home/foo/htdocs/bar.cgi とだけ表示されます。この時、他のエラーメッセージは見当たりません。 きちんと動いてはいるので問題ないと言えば問題ないのですが、これを出さないようにするにはどうしたら良いでしょうか。 ・404エラーではなく、普通にウェブページを出力した場合には問題ありません。 ・同じディレクトリでは別のCGIも問題なく動いており、パーミッションはそれらと同値に設定してあります。 ・確認してみたところバージョンはApacheが1.3、Perlが5.8です。古い(´・ω・`)
586 名前:nobodyさん mailto:sage [2012/03/23(金) 04:35:43.93 ID:???] たぶんcontent-typeを書くと消えるというかググれ
587 名前:nobodyさん [2012/03/23(金) 04:46:19.26 ID:SsskDSLS] >>586 ありがとう。でもtext/htmlにしろtext/plainにしろ状況は変わらないんだ
588 名前:nobodyさん mailto:sage [2012/03/23(金) 04:58:11.94 ID:???] >>585 exitって必要なの
589 名前:nobodyさん mailto:sage [2012/03/23(金) 05:11:05.01 ID:???] \n\n
590 名前:nobodyさん mailto:sage [2012/03/23(金) 05:15:18.99 ID:???] Header1: foo Header2: bar (空行) body 仮にボディを空にするとしても、ヘッダとボディを隔てるものは必要ですよね
591 名前:nobodyさん [2012/03/23(金) 05:46:15.14 ID:SsskDSLS] >>588 確かに585のような最小コードでは、exitは有っても無くても変わらないかも。 >>589-590 ステータスコードの末尾を\n\nにすると、 実際にページが送信されている(といっても改行1つだけだが)という扱いになるのか、 デフォルトの404ページが表示されずに、真っ白のページが表示されるようだ。 ちょっと面倒だけど、ブラウザ表示用にエラーページを用意して、 それを出力するようにすれば、とりあえず問題は無さそう。 .htaccessでErrorDocument指定されてるページに飛ばすには、自前でリダイレクトするしか無いのかなー?
592 名前:nobodyさん mailto:sage [2012/03/24(土) 01:12:43.26 ID:???] >>591 普通exitなんて書かないよ?トホホにでも書いてあったのかな。
593 名前:nobodyさん mailto:sage [2012/03/24(土) 03:29:50.29 ID:???] >>592 トホホは見てないけど、そうなんだ。 正常終了のときは使わない方がいいのかな。まあ、異常終了ならdie使うけど。
594 名前:nobodyさん mailto:sage [2012/03/24(土) 06:48:02.45 ID:???] コードが最小だろうが最大だろうがそんなものは必要ない
595 名前:nobodyさん mailto:sage [2012/03/24(土) 08:52:21.86 ID:???] 何故exitが不要なのか、 いわゆる「省略の美学」以外に積極的な理由があったら、誰か教えて欲しい。 何らかの弊害(速度や安全性の問題など)があるとか、 別の関数等で置き換えるのが普通だとか、 構造化プログラミングにおけるgoto不要論と同じような理由だとか、ヒントでも構わないので。