1 名前:nobodyさん mailto:sage [2008/02/25(月) 19:25:51 ID:???] Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 「コマンドの意味がわかんない」とかはマニュアル見ましょう。 回答者さんは何でも屋じゃありません。 1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。 お勧めサイトは >2 以降 前スレ pc11.2ch.net/test/read.cgi/php/1189939783/ 過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
581 名前:nobodyさん mailto:sage [2008/05/28(水) 01:24:48 ID:???] 今日が今月の何週目か求めるにはどうしたらよいでしょうか
582 名前:576 mailto:sage [2008/05/28(水) 01:29:54 ID:???] $global_foo = $foo = 1; $global_bar = $bar = 2; @_ = (3,4); #@_に値あり { my $foo; my $bar; $foo = $_[0]; $bar = $_[1]; $foo = $global_foo unless defined $foo; $bar = $global_bar unless defined $bar; print "point 1: foo=$foo bar=$bar\n"; } print "point 2: foo=$foo bar=$bar\n"; 出力結果 point 1: foo=3 bar=4 point 2: foo=1 bar=2
583 名前:576 mailto:sage [2008/05/28(水) 01:32:06 ID:???] $global_foo = $foo = 1; $global_bar = $bar = 2; @_ = (3,4); #@_に値あり { my $foo; my $bar; $foo = $_[0]; $bar = $_[1]; $foo = $global_foo unless defined $foo; $bar = $global_bar unless defined $bar; print "point 1: foo=$foo bar=$bar\n"; } print "point 2: foo=$foo bar=$bar\n"; 出力結果 point 1: foo=1 bar=2 point 2: foo=1 bar=2 ━━━━━━━━━━━━━━━━━━━━━━━ うん、欲しかった動作そのままだけど。 >>577-578 が理解できず悩み中
584 名前:nobodyさん mailto:sage [2008/05/28(水) 01:34:02 ID:???] ぎゃー、>>583 張り間違えた 【誤】@_ = (3,4); #@_に値あり 【正】@_ = (); #@_に値無し orz 120秒規制が若干きつい…
585 名前:nobodyさん mailto:sage [2008/05/28(水) 01:35:51 ID:???] Date::Calc
586 名前:nobodyさん mailto:sage [2008/05/28(水) 01:46:51 ID:???] >>576 目的が分からん。そもそも何がしたいの? 説明する気あるのか? my $foo = 1; my $bar = 2; print $foo = func( $foo ); print $bar = func( $bar ); print $foo = func( $foo, 3 ); print $bar = func( $bar, 4 ); exit; sub func { return defined( $_[1] ) ? $_[1] : $_[0]; }
587 名前:nobodyさん mailto:sage [2008/05/28(水) 01:47:41 ID:???] >>585 感動した ありがとう
588 名前:576 mailto:sage [2008/05/28(水) 01:58:37 ID:???] >>586 サブルーチン冒頭にて、引数リスト > デフォルト値(グローバル変数の値とか) の優先順でmy変数値を設定したいことはよくあるから、 perlなら… perlならきっとすごくスマートに書く方法があるに違いない… という夢を見たけど、幻だったみたいですね… 変数ひとつずつシコシコとunless definedを当てることにします。
589 名前:nobodyさん mailto:sage [2008/05/28(水) 02:00:25 ID:???] いや、日本語でおk お前の望むようなことは確実にできると思うんだけど、 なにぶん言いたいことがよく分からんw
590 名前:nobodyさん mailto:sage [2008/05/28(水) 02:16:48 ID:???] my $global_foo = my $foo = 1; my $global_bar = my $bar = 2; # @_ =( ); @_ =( 3, 4 ); { my $foo = defined( $_[0] ) ? $_[0] : $global_foo; my $bar = defined( $_[1] ) ? $_[1] : $global_bar; print "point 1: foo=$foo bar=$bar\n"; } print "point 2: foo=$foo bar=$bar\n"; 結局、最初に提案されてる回答をアレンジすれば、 >>582-584 をシンプルかつ可読性も保ったまま実現できるんだが。 これじゃいかんの?
591 名前:nobodyさん mailto:sage [2008/05/28(水) 02:25:18 ID:???] >>590 そのへんが限界みたいですね…ありがとうございます。 私の欲求そのものが十分特殊だったのかな… いま考えてる最善の形はサブルーチンを使うことです。 サブルーチンコールは負担かかりそうだからやりたくないんだけど… sub merge_argument_and_default{ my ($argument, @default) = @_; my @value; while(1){ my ($a, $v) = (shift @$argument, shift @default); my $c = ((defined $a) ? $a : $v); last unless defined $c; push @value, $c; } return @value; } sub foo{ my(@bar) = &merge_argument_and_default(\@_, @default_bar); } みなさんありがとうございました。
592 名前:nobodyさん mailto:sage [2008/05/28(水) 02:30:59 ID:???] 殺してぇ……。日記じゃねぇんだよ。
593 名前:nobodyさん mailto:sage [2008/05/28(水) 06:17:52 ID:???] >>580 もう実装されてるよ? search.cpan.org/dist/perl/pod/perl5100delta.pod#Defined-or_operator
594 名前:nobodyさん mailto:sage [2008/05/28(水) 06:40:31 ID:???] >>576 みたいに、自分のプライド保つために 当初の目的をすり替えて、自分は違うもの作ってました的な発言するやつは質問にくるなよ。 当初は「>>569 をコンパクトにしたい」って言ってただけなのに、 どんな解が提示されても、 どんどん違う方向に勝手に転換して善意のレスすら流し読み。 こういう奴は、治らないから本当に放置すべきだと思うよ。
595 名前:nobodyさん mailto:sage [2008/05/28(水) 07:18:42 ID:???] >>594 それは違うんだけど、あなたへの説得は無理かな。 ひどく機嫌を損ねてしまったのは悪いと思ってるが。 いただいたありがたいアドバイスから、例えば今回は、 「サブルーチン化でもしなければ相当コンパクトに収めるのは難しいらしい」 「そのサブルーチンはこういう形で書くのがよいのだろうか」 などと、自分の知識や興味対象は移り変わっていくことが多いです。 ただ、このスレッドにはしばらく書き込みを自粛します。さよなら。
596 名前:nobodyさん mailto:sage [2008/05/28(水) 10:11:34 ID:???] 典型的な"隠す人"だったか。
597 名前:590 mailto:sage [2008/05/28(水) 10:39:10 ID:???] うわ、ちょっと離れたスキにすげぇ慇懃無礼なこと書いてやがる。 目的も明確にせず、そのへんが限界てw そもそも次の疑問に移ったなら、その過程を説明するのが回答者への最低限の礼儀だろ。 社会出て苦労するよ。 ちなみに>>591 は、俺ならこう書く。 sub merge_argument_and_default { my ($argument, @default) = @_; my %count; $count{$_} = $default[$_] for( 0..$#default ); $count{$_} = ${ $argument }[$_] for( 0..$#{ $argument } ); return map { $count{$_} } sort keys %count; }
598 名前:nobodyさん mailto:sage [2008/05/28(水) 11:40:59 ID:???] >595みたいなやつっているよね 言葉遣いが丁寧なだけで、いっぱしの大人だと思ってる人。
599 名前:nobodyさん mailto:sage [2008/05/28(水) 12:04:01 ID:???] sub merge_argument_and_default { map{ defined $_[0][$_] ? $_[0][$_] : $_[$_ + 1] ;} 0 .. $#{$_[0]} ; } >>598 ガキなの見え見えなんだよねw ttp://www2.atpages.jp/mirror/2ch/perl/prog/read.php/1157874614/ の595を思い出した。
600 名前:nobodyさん mailto:sage [2008/05/28(水) 13:55:09 ID:???] >>593 そいえば5.10でてるんだっけ(汗 RHELとCentOSしか使ってないからすっかり忘れてました。
601 名前:nobodyさん mailto:sage [2008/05/28(水) 15:44:58 ID:???] 5.10って絶対分かりづらいよw 5.8より昔のリリースだとしか思えない。
602 名前:nobodyさん mailto:sage [2008/05/28(水) 15:51:58 ID:???] Ver 5.008008 Ver 5.010000 こう書けばよいのか?
603 名前:nobodyさん mailto:sage [2008/05/28(水) 16:09:29 ID:???] 5.1の方が新しいんですか? 知らなかったorz
604 名前:nobodyさん mailto:sage [2008/05/28(水) 16:21:25 ID:???] 5.10.0 > 5.9.5 > 5.8.8 >> 5.1.0 苦肉の策なんだろうな……。
605 名前:nobodyさん mailto:sage [2008/05/28(水) 17:55:49 ID:???] perl6ってどうなったん?
606 名前:nobodyさん mailto:sage [2008/05/28(水) 19:03:22 ID:???] >>605 parrotの新しいのが最近でた気が・・・
607 名前:nobodyさん mailto:sage [2008/05/28(水) 20:28:19 ID:???] あるIPアドレスが変数$ipに格納してあります。 この$ipが存在するか、あるテキストファイル(ip.txt)を読んで チェックしています。以下は例です。 $ipは"192.168.0.1" ip.txtに192.168.0.1が記述してあります。 この場合マッチするようプログラムしてあります。 ip.txtに 192.168.0.0/24 または 192.168.0.0/255.255.255.0 と記述してあるものと マッチさせたいのですが、 そういうサブルーチンは ありますでしょうか? 簡単にいうと、あるIPアドレスが サブネットマスクで指定してある 10進表記またはサイダー表記に マッチするか判定したいのです。 ip.txtは10進表記でもサイダー表記の どっちでも構いません。
608 名前:nobodyさん mailto:sage [2008/05/28(水) 20:34:04 ID:???] ttp://pc11.2ch.net/test/read.cgi/tech/1086143976/491-590 の543-544及び「IP pack unpack perl」でググれ。
609 名前:607 mailto:sage [2008/05/28(水) 20:59:40 ID:???] >>608 あり♪ 明日、見てみるよん
610 名前:597 mailto:sage [2008/05/28(水) 21:17:34 ID:???] >>599 終わった話題なんだけど、ちょっと気になった。 めんどくさかったら、スルーして。 提示してくれてるルーチンだと、 引数1 @array1 = (); 引数2 @array2 = ( 1,2 ); のとき、返り値が空になっちゃうよね。 配列1(引数1) > 配列2(引数2) という優先順位で、 配列3(返り値)を混ぜ合わせるというのが目的の処理だと思うんだけど、 配列1と配列2で要素数の大きい配列を、要素数だけループさせる処理にする場合、 キレイにまとめる方法ってないかなぁ? if( ( $#array1 <=> $#array2 ) == -1 ) { EXPR for( 0..$#array2 ); } else { EXPR for( 0..$#array1 ); } みたいな、冗長な方法しか俺には思い浮かばなかった。 だから、「配列の重複値をハッシュを利用してマージ」の応用みたいなことを>>597 でやってみたわけだ。 なんか美しい方法あればいいんだけどなぁ。
611 名前: ◆TWARamEjuA mailto:sage [2008/05/28(水) 21:20:10 ID:???] (´-`).。oO(Net::CIDRでよさそうな。。。)
612 名前:597 mailto:sage [2008/05/28(水) 21:26:18 ID:???] my @temp = ( $#array1 <=> $#array2 ) == -1 ) ? ( 0..$#array2 ) ; 0..$#array1; こんな前処理してから、>>599 のmap対象配列に、( 0..\$temp ) って感じかなぁ? エレガントさには欠けるけど、これが可読性保つギリギリかな?
613 名前:597 mailto:sage [2008/05/28(水) 21:28:46 ID:???] 動作確認してないからtypoしまくり。まぁ分かるよね?(苦笑
614 名前:607 mailto:sage [2008/05/28(水) 21:31:18 ID:???] >>611 私へのレスですね。 明日調べてみます
615 名前:599 mailto:sage [2008/05/28(水) 22:23:24 ID:???] >>610 ああ、 @array1 = ( undef, undef ) ; は考えてたけども、それは想定してなかったw >>612 の解で良いんじゃね? 助長を厭わないならば、 map{ 略 } 0 .. $#{$_[0]} , 0 .. $#_ - 1 ; っつー荒技もw 自分のスクリプトじゃ絶対やんないけどね。
616 名前:599 mailto:sage [2008/05/28(水) 22:27:21 ID:???] >>615 s/助長/冗長/
617 名前:nobodyさん mailto:sage [2008/05/29(木) 03:05:45 ID:???] mapがいまいち理解し切れなくて使ってないんだが覚えとくべき? 覚えると便利そうだけど。
618 名前:nobodyさん mailto:sage [2008/05/29(木) 03:45:40 ID:???] やってることは、forやforeachと変わらん。 違うっていえば、{}の中を、引数リストのそれぞれの要素で実行した結果をリストとして返すってとこか。 かなり便利な局面もある。覚えとくべきだとは思う。 @res = map{ $_ + 10 } (1,2,3,4,5) ; print join("\n",@res); ---結果--- 11 12 13 14 15
619 名前: ◆TWARamEjuA mailto:sage [2008/05/29(木) 07:02:31 ID:???] my $Now_Date = sprintf qq|%04d/%02d/%02d %02d:%02d|, map { $_->[0] += 1900; $_->[1]++; @$_; }[(localtime)[5,4,3,2,1]]; 2008/05/28 07:02 って出るかと思う。
620 名前:nobodyさん mailto:sage [2008/05/29(木) 08:23:18 ID:???] >>617 シュワルツ変換という定番sort手法には必須だよ。 ぐぐって、foreach 文で書いてみたらありがたみが分ると思う。 >>619 お前さんの例は頻繁にとんでもなく斜め上を行くなあw なんで一要素しかないと分りきってる無名配列を作って map の例にする? do ならいざしらず perl -le 'my $Now_Date = sprintf qq|%04d/%02d/%02d %02d:%02d|, do{ @_ = (localtime )[5,4,3,2,1] ; $_[0] += 1900 ; $_[1] ++ ; @_ } ; print $Now_Date ;' それ以前に普通は↑こんな面倒な事しないだろ? perl -MPOSIX=strftime -le '$str =strftime "%Y/%m/%d %H:%M", localtime; print $str, "\n"; '
621 名前:607 mailto:sage [2008/05/29(木) 17:51:57 ID:???] Net::CIDR::cidrlookupでうまくいきそうなのですが、 IPアドレスのチェックを行いたいと思ってます。 ググると、以下の様な正規表現がありますが、 \d(バックスペース)の意味が分かりません。 どういう意味なんでしょうか? \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
622 名前:nobodyさん mailto:sage [2008/05/29(木) 17:53:57 ID:???] 0-9
623 名前:607 mailto:sage [2008/05/29(木) 17:54:42 ID:???] すみません。 \dは数字でした。 申し訳ない
624 名前:607 mailto:sage [2008/05/29(木) 18:10:05 ID:???] またまたお願いします。 正規表現で/をマッチさせたいのですが、 以下であってますでしょうか? $hoge =~ /\//
625 名前:607 mailto:sage [2008/05/29(木) 18:11:58 ID:???] すんません \/で、いけるみたいです。 お騒がせしました。
626 名前:nobodyさん mailto:sage [2008/05/29(木) 18:15:31 ID:???] $hoge =~ m(/); すこしは綺麗?
627 名前:nobodyさん mailto:sage [2008/05/29(木) 18:19:11 ID:???] >>617 だけどレスありがとう。 シュワルツ変換とかまだいまいち理解できないけど良さそうだね。 sortは結構使うから思い処理の部分で使うのはいいかも。 でも問題は後で読み直して何してるか理解できなくなりそうな所だな。
628 名前: ◆TWARamEjuA mailto:sage [2008/05/29(木) 20:45:58 ID:???] >>620 つっこみおおきに♪ mapを覚えちゃってからどんどん斜め上に逝っちゃいました。 ひとまず車輪の再発明は大好き♪
629 名前:nobodyさん mailto:sage [2008/05/30(金) 02:09:30 ID:???] 曲芸はほどほどに
630 名前:nobodyさん mailto:sage [2008/05/30(金) 08:17:40 ID:???] 出来た物が車輪じゃない上に使えないのならただの無駄
631 名前:nobodyさん mailto:sage [2008/05/30(金) 10:14:07 ID:???] 車輪を作ろうとしたら鎖鎌が出来ちゃった感じだな
632 名前:nobodyさん mailto:sage [2008/05/30(金) 10:19:32 ID:???] まーmapは便利だってことだ
633 名前:nobodyさん mailto:sage [2008/05/30(金) 11:57:18 ID:???] XML::DOMを使ってXHTMLに広告を挿入するCGIを書いたのですが、use encoding "utf8"; を書くとローカルで文字化けしてしまいます。これをコメントアウトすると XREA.COMのサーバ上でScript Errorが発生してしまいます(しかもエラーログが見られない)。 ローカルでもXREA.COM上でも動くようにしたいのですがどうすればいいでしょうか。 コードはこんな感じです。 #!/usr/bin/perl use strict; use XML::DOM; use encoding "utf8"; my $xhtml_file = $ENV{'PATH_TRANSLATED'}; my $parser = new XML::DOM::Parser; my $doc; eval { $doc = $parser->parsefile($xhtml_file) }; if($@) { print "Content-Type: text/plain;charset=utf-8\n\n"; print "parsing error occured: $@"; exit; } # 広告挿入処理 print "Content-type: application/xhtml+xml;charset=utf-8\n\n"; print $doc->toString; $doc->dispose; ローカルの環境はUbuntu 8.04 + Perl 5.8.8 + Apache 2.2.8、 XREA.COMはよくわかりません。
634 名前:nobodyさん mailto:sage [2008/05/30(金) 12:22:33 ID:???] >>632 だれも「mapが不便」なんて言ってないがな 明らかにバッドノウハウなコードを曝してる奴をくさしてるだけで
635 名前:nobodyさん mailto:sage [2008/05/30(金) 12:23:13 ID:???] すみません。自己解決しました。use encoding "utf8";をコメントアウトして utf8::is_utf8($doc->toString) ? print encode('utf-8', $doc->toString) : print $doc->toString; とすればいいみたいです。utf8フラグというのが関係しているみたいなので、 調べてみます。おさわがせしました。
636 名前:nobodyさん mailto:sage [2008/05/30(金) 12:40:26 ID:???] >>635 これはマジメに調べまくった方がいい。 慣れるまでPerl5.8以降でハマる最大の原因。
637 名前:nobodyさん mailto:sage [2008/05/30(金) 12:50:11 ID:???] BOM付けてたりして・・・
638 名前:nobodyさん mailto:sage [2008/06/01(日) 07:19:24 ID:???] BOMBなら付いてますw
639 名前:nobodyさん mailto:sage [2008/06/02(月) 12:34:35 ID:???] Wed, 12 Mar 2008 21:20:11 GMT Last-Modified↑これをtimeの値に変換する方法を教えてください。 3600秒以内とかの判定に使いたいので。
640 名前:nobodyさん mailto:sage [2008/06/02(月) 12:49:16 ID:???] >>639 timelocal
641 名前:nobodyさん mailto:sage [2008/06/02(月) 12:57:39 ID:???] >>640 ありがとうございました!
642 名前:nobodyさん mailto:sage [2008/06/02(月) 13:51:21 ID:???] こんな感じで出来たのですが凄く格好悪いです。 $mon = 1 if $mon eq 'Jan';とか。 スマートな例があったら参考の為に見せてください。 sub last_modified { my $time = shift; my($day, $mon, $year, $hour, $min, $sec); if ($time =~ /\w+, (\d+) (\w+) (\d+) (\d+):(\d+):(\d+) GMT/) { ($day, $mon, $year, $hour, $min, $sec) = ($1, $2, $3, $4, $5, $6); $mon = 1 if $mon eq 'Jan'; $mon = 2 if $mon eq 'Feb'; $mon = 3 if $mon eq 'Mar'; $mon = 4 if $mon eq 'Apr'; $mon = 5 if $mon eq 'May'; $mon = 6 if $mon eq 'Jun'; $mon = 7 if $mon eq 'Jul'; $mon = 8 if $mon eq 'Aug'; $mon = 9 if $mon eq 'Sep'; $mon = 10 if $mon eq 'Oct'; $mon = 11 if $mon eq 'Nov'; $mon = 12 if $mon eq 'Dec'; } else { die "Error: $time\n"; } $time = timelocal($sec,$min,$hour,$day,$mon-1,$year); return $time; }
643 名前:nobodyさん mailto:sage [2008/06/02(月) 14:47:28 ID:???] >>642 %mons = ( Jan => 1, Feb => 2, Mar => 3, Apr = 4, # ……以下省略 ); $mon = $mons{$mon}; とかどうよ?
644 名前:nobodyさん mailto:sage [2008/06/02(月) 15:22:18 ID:???] >>643 ありがとうございます。 連想配列は普段全く使わないので、この機会に試してみます!
645 名前:nobodyさん mailto:sage [2008/06/02(月) 15:44:50 ID:???] >>643 は、どうせ後で1引くのに、どうしてわざわざ1足すのさ?w
646 名前:nobodyさん mailto:sage [2008/06/02(月) 16:15:30 ID:???] >>645 ほんとだ>< お前頭いいな すみません><
647 名前:nobodyさん [2008/06/02(月) 17:46:33 ID:VCfcjQkN] CPANを使わずにモジュールを使いたいのですが、なかなかうまくいきません。 HTML::Template を使いたいのですが、 ローカルにインストールしている、 C:\Perl\cpan\build\HTML-Template-2.9\Template.pm というファイルを、以下のcgiと同ディレクトリにコピーしました。 #!/usr/local/bin/perl use strict; use lib qw(.); use HTML::Template; print "Content-type:text/html\n\n", "test"; ですが、うまくいかないようです。 use lib qw(.); の部分を、 unshift @INC, '.'; などとしても不可能でした。 ググっても上記の方法ぐらいしか出てこないんですが、何がいけないか教えていただけますでしょうか。 Perl のバージョンは 5.00503 です。
648 名前:nobodyさん mailto:sage [2008/06/02(月) 17:51:49 ID:???] Template.pmをHTMLというディレクトリを作ってそこにいれる
649 名前:nobodyさん [2008/06/02(月) 18:08:23 ID:VCfcjQkN] >>648 ありがとうございます。 助言どおりHTML ディレクトリにTemplate.pmを入れて、エラーが出たので、 Digest::MD5がどうだとかエラーが出ました。 同じ要領で、Digest ディレクトリを作り、MD5.pmを入れると、 次はXSLoader.pmが必要らしく、それもcgiと同ディレクトリに入れました。 次はDynaLoader.pmがどうとかエラーが出たので、それも同じディレクトリに入れたのですが、 今度はエラーが消えませんでした。。 最終的にCGI::Carpがはいたエラーは以下です。 [Mon Jun 2 18:01:45 2008] Template.pm: [Mon Jun 2 18:01:45 2008] Template.pm: [Mon Jun 2 18:01:45 2008] MD5.pm: [Mon Jun 2 18:01:45 2008] MD5.pm: [Mon Jun 2 18:01:45 2008] DynaLoader.pm: Can't locate loadable object for module Digest::MD5 in @INC (@INC contains: /usr/lib/perl5/5.00503/i386-linux /usr/lib/perl5/5.00503 /usr/lib/perl5/site_perl/5.005/i386-linux /usr/lib/perl5/site_perl/5.005 .) at HTML/Template.pm line 915 [Mon Jun 2 18:01:45 2008] Template.pm: [Mon Jun 2 18:01:45 2008] Template.pm: BEGIN failed--compilation aborted at HTML/Template.pm line 915. BEGIN failed--compilation aborted at test.cgi line 6.
650 名前:nobodyさん mailto:sage [2008/06/02(月) 18:17:18 ID:???] CPAN にモジュールの関連性とか書いてなかったっけ?
651 名前:nobodyさん mailto:sage [2008/06/02(月) 18:18:22 ID:???] 関連性とかじゃなくて依存のこと
652 名前:nobodyさん [2008/06/02(月) 18:25:00 ID:VCfcjQkN] q.hatena.ne.jp/mobile/1195733487 ↑必要としているモジュールは違うものの、 この人と同じ状況なのかな、と思うんですがどう思いますか? 同じ状況だとすると、不可能ですよね FTPであげることしかできませんので。。。
653 名前:nobodyさん mailto:sage [2008/06/02(月) 18:41:40 ID:???] 呼び出されてるDLLがWin用のコンパイル済みDynaLoader.pmを、Linuxにそのままコピーしたんでしょ? たぶん。 Linuxでコンパイルし直さないとムリ。よってムリ。
654 名前:nobodyさん [2008/06/02(月) 18:45:29 ID:VCfcjQkN] あぁ・・・やはり無理ですか。 5.00503で使えるHTML::Templateの代わりのようなものがほしいんですが、 どこを探せばいいでしょうか。 何度も申し訳ありません。
655 名前:nobodyさん [2008/06/02(月) 18:52:18 ID:VCfcjQkN] HTML::Templateの昔のバージョンとかなら5.00503でも動きますかね?
656 名前:nobodyさん mailto:sage [2008/06/02(月) 18:56:19 ID:???] その知識だと、HTML::Templateなんて必要ないじゃん!的な使い方しかしてしないと予想されるので、 自前でテンプレート化した方が早い。 スキン対応と銘打ってる配布CGIのソース読んだ方が早い気がする。
657 名前:nobodyさん mailto:sage [2008/06/02(月) 18:59:25 ID:???] HTML をテンプレート使って出力するようにすると病み付きになる
658 名前:nobodyさん mailto:sage [2008/06/02(月) 19:03:56 ID:???] 5.005のこと詳しくしらないけど、DynaLorderとかって、標準で入ってないの? ってか、>>649 の内容を見るに、DynaLorderでわなくて、Digest::MD5(.so)が無いんでないの?(これも標準でない?) まあなければ、Digest::MD5はXSモジュール含んでるから、 そのサーバー上でコンパイルし直さないと実行できないのは、>>653 と同じ意見だけど。
659 名前:nobodyさん [2008/06/02(月) 19:07:00 ID:VCfcjQkN] PerlってHTMLと親和性ないですよね〜。 テンプレート使えないとなると、めんどくさくなるけど、まぁがんばります。 ありがとうございました。
660 名前:nobodyさん mailto:sage [2008/06/02(月) 19:49:04 ID:???] 自分の未熟さを言語のせいにするなよw HTMLと最も親和性のある言語として、Perl/CGIが一世風靡しただろ。
661 名前:nobodyさん mailto:sage [2008/06/02(月) 19:51:49 ID:???] >>657 kwsk
662 名前:nobodyさん mailto:sage [2008/06/02(月) 19:59:46 ID:???] >>661 ちょっとかじった程度の人でもデザイナーとプログラマを切り分けられる利点がある
663 名前:nobodyさん [2008/06/03(火) 00:57:17 ID:etSjPPZK] PostやGetで送られてきたURIエンコードをデコードしてハッシュに確保するような プログラムを作ったのですが HTMLのformでenctypeをmultipart/form-dataにすると 送られてくるデータの形式が変わってしまって うまくハッシュに確保することができなくなっちゃいました。 送られてきたデータが multipart/form-dataなのか application/x-www-form-urlencodedなのか 調べる方法ってありますか? ついでに、multipart/form-dataで送られてきたデータの扱い方を まとめてあるサイトとかありましたら教えてほしいです。
664 名前:nobodyさん mailto:sage [2008/06/03(火) 01:01:53 ID:???] multipart/form-data って文字があるのか application/x-www-form-urlencoded って文字があるのかで簡単に判別着く multipart/form-data の処理は CGI.pm 使ってね♪
665 名前:nobodyさん mailto:sage [2008/06/03(火) 01:12:56 ID:???] >>663 CGI.pm ならどちらの形式でも意識せず受け取れる。 perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod 自前実装したいのなら www.studyinghttp.net/cgi-bin/rfc.cgi?3875#Sec8.2 www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#h-17.13.4.1 www.studyinghttp.net/cgi-bin/rfc.cgi?2388
666 名前:nobodyさん [2008/06/03(火) 01:24:31 ID:etSjPPZK] >>665 ありがとう!
667 名前:nobodyさん mailto:sage [2008/06/03(火) 01:58:53 ID:???] >>659 テンプレートエンジン、自分で作るという手もある。 そんなに難しくないよ。 Compositeパターンでも使えば。
668 名前:nobodyさん mailto:sage [2008/06/03(火) 09:41:38 ID:???] >>659 HTML をふつうに書く HTML なかに <%BODY%> とか、挿入場所を示す識別子をいくつか用意して書き込む プログラムからテンプレート HTML を読み込む 正規表現で置換 たったこれだけです。
669 名前:nobodyさん mailto:sage [2008/06/03(火) 11:07:04 ID:???] Template::Toolkitならともかく HTML::Templateは単純な処理だしね さくっと使いたい時には便利、無けりゃ無いでどうにでもなる
670 名前:nobodyさん [2008/06/03(火) 12:56:41 ID:K4KbdDUT] Perlでindex.cgiを作って そのCGIですべてを管理するような仕組みを作った場合 やっぱindex.cgiにアクセスが集中してよくなかったりするんですか?
671 名前:nobodyさん mailto:sage [2008/06/03(火) 13:31:41 ID:???] index.cgi で処理させる内容を挙げてくれないとまったくわからない 自分は普通のエディタ (関数へのジャンプとか無くて色分けだけ) なので まったく違う処理はファイル分けてる
672 名前:nobodyさん mailto:sage [2008/06/03(火) 17:01:51 ID:???] 多分聞きたい事って、hoge1.cgiとhoge2.cgi…hoge100.cgiとかあったら それぞれ頭で同じ事やってるから、all.cgi(index.cgi?)に全て まとめられないか?って事じゃないのかな? my $cgi = CGI->new(); my $config = init(); if( $cgi->param('mode')eq'hoge1' ) { require 'hoge1.pl'; hoge1::main($config); } elsif( $cgi->param('mode')eq'hoge2' ) { require 'hoge2.pl'; hoge2::main($config); …って、感じで。漏れも昔、初心者だった時に同じ事を思った。 答えは、当然all.cgi(index.cgi?)の呼び出しのオーバーヘッドは 全CGIの呼び出し回数倍増えるよ。 そういう事じゃなくて??
673 名前:nobodyさん mailto:sage [2008/06/03(火) 17:44:51 ID:???] >>670 俺それやってる wikiみたいに書けるテキストファイルを自動で携帯/PCに最適化してValid XHTML出力する、みたいな。
674 名前:nobodyさん mailto:sage [2008/06/03(火) 17:56:29 ID:???] bloxsomだっけ?
675 名前:nobodyさん mailto:sage [2008/06/03(火) 19:41:27 ID:???] perl関連のプロジェクトは企画倒れが本当に多いね。 企画倒れというより、制作者が途中で飽きて、ブームになっても、そのまま放置……みたいな。 かのCPANだって、一部のモジュール以外は、姥捨山みたいになってる。 古いモジュールに、パッチ送ってもメール不達とか多すぎるんだよ!
676 名前:nobodyさん mailto:sage [2008/06/03(火) 20:52:43 ID:???] tp://www.drk7.jp/weather/ ここの 東京の xml から加工を行っています。 最終的には明日の天気を出力したいのですが、以下のコードを書いたところ 気温や降水確率が出力されなくて悩んでいます。 ================================================ use XML::TreePP; use strict; my $tpp = XML::TreePP->new(); my $tree = $tpp->parsefile( '13.xml' ); print $tree->{weatherforecast}->{pref}->{area}->[1]->{info}->[1]->{weather} , "\n"; print $tree->{weatherforecast}->{pref}->{area}->[1]->{info}->[1]->{temperature}->{range}->[1]; ================================================ {range}->[1] で %hash と言われてしまうのはどうしてでしょうか。 その後に [1]->{-centigrade} をするとこの場合は min が出てくるのは判っています。
677 名前:nobodyさん mailto:sage [2008/06/03(火) 21:13:48 ID:???] [1]->'#text' ダンプしろよ
678 名前:nobodyさん mailto:sage [2008/06/03(火) 21:21:10 ID:???] print $tree->{weatherforecast}{pref}{area}[1]{info}[1]{temperature}{range}[1]{#text} manual嫁。 あと、XMLの中にareaやinfoやrangeの要素が1つしか無い場合に配列要素に ならないのがTreePPの仕様なので、例えばinfoが1要素しか無い場合は print $tree->{weatherforecast}{pref}{area}[1]{info}{temperature}{range}[1]{#text} とアクセスしなくてはいけない。オプションで回避できるけど。
679 名前:670 [2008/06/03(火) 22:25:48 ID:etSjPPZK] 言葉が足りんでした。スミマセン。 >>673 ちょっと俺の勉強不足で言ってることがよくわからないけれど 例えばindex.cgi?page=homeだとhome.htmlをcgiプログラムが引っ張ってきて表示する みたいな仕組みを作った場合、 どのユーザーがどのページを見てもindex.cgiに必ずアクセスするわけじゃない? てことはページが1000ページとかできたとして いろんな人がいろんなページを見出したらindex.cgiのアクセスが集中して なんかまずいことになったりしないのかなって思ったの。 教えてLarry!!
680 名前:nobodyさん mailto:sage [2008/06/03(火) 22:40:04 ID:???] つか、ほとんどのWEBアプリケーションは、特定ファイルに負荷集中するがな。
681 名前:670 [2008/06/04(水) 00:28:11 ID:KcodebuX] >>680 あ、じゃあ余計な心配しなくて大丈夫かぁ
682 名前:nobodyさん mailto:sage [2008/06/04(水) 01:09:20 ID:???] つ mod_perl
683 名前:nobodyさん mailto:sage [2008/06/04(水) 05:38:01 ID:???] A:opendir でファイル一覧を取得する B:予めファイル一覧をそれ用のメモファイルに書き出しておいてそれを読みこんで取得 AとBではどちらが負荷が少ないですか?
684 名前:nobodyさん mailto:sage [2008/06/04(水) 06:05:53 ID:???] 自分で調べられる手間を人に仮託するな。
685 名前:nobodyさん mailto:sage [2008/06/04(水) 08:14:25 ID:???] >>670 >>672 に答えが書いてあるのだが、何故それを無視する?
686 名前:nobodyさん mailto:sage [2008/06/04(水) 10:13:14 ID:???] どなたか教えてください。 掲示板のタイトル一覧取得を現在作っています。 それでタイトルがもし長かった場合、最初の9byteだけを表示するようにしたいのですが・・・ if (length($title) > 9) { $get = substr($title[3],0,9); } 以上のようにしてしまうと、9byte目に全角文字が来た場合文字化けしてしまいます。 例えば、 $title = "testtesttest"; この場合は $get = testtestt $title = "テストテスト"; これだと $get = テストテ爛 こういった文字化けを回避するような、いい方法は無いでしょうか?
687 名前:nobodyさん mailto:sage [2008/06/04(水) 10:15:53 ID:???] jfold
688 名前:686 mailto:sage [2008/06/04(水) 10:27:56 ID:???] 2分での光速のお返事ありがとうございます。 調べてみたところ、Jcode.pmのモジュールみたいですね。 今までずっとjcode.plばっかだったので知らなかった… さっそく試してみます。 どうもありがとうございました。
689 名前:670 [2008/06/04(水) 13:24:15 ID:44uKn/lk] >>685 スミマセン基地外でした。
690 名前:nobodyさん [2008/06/05(木) 00:08:18 ID:S7Nj2GEO] ところでさ…何故elsifなんだと思う? どうせならifにあわせてelとefとか2文字にしてほしかったん
691 名前:nobodyさん mailto:sage [2008/06/05(木) 00:28:25 ID:???] ごめんなさいごめんなさい
692 名前:nobodyさん mailto:sage [2008/06/05(木) 22:21:15 ID:???] Cか何かでやってる人いたな。
693 名前:nobodyさん mailto:sage [2008/06/05(木) 23:21:13 ID:???] 最近5.10を使うようにしてんだけどgiven-whenが馴染めない switch-caseでいいと思うのになんでgiven-whenにしたのかな?Switch.pmがあるから?
694 名前:nobodyさん mailto:sage [2008/06/06(金) 01:28:23 ID:???] >>693 pc11.2ch.net/test/read.cgi/php/1008355270/85 Perl の自然言語的体裁には switch-case より given-when の方が よりしっくりくるかもね。
695 名前:nobodyさん [2008/06/07(土) 20:54:21 ID:8brPzE2o] www.vid-dl.net/ このサイトに v.youku.com/v_show/id_ch00XMjc3MDQ1MzI=.html を入力するとリンク先が4つほどでます。 これを自分でもPerlCGIで再現したいんですが、4つのリンク先をどうやって出してるのかわかりません。 HTMLのソースを見る限り4つないんです。 ないものを何かを元にして解析?してるようです。 4つの違いは以下です f.youku.com/player/getFlvPath/sid/12008536434684686883/st/flv/fileid/ までは一緒以下が 0200640400482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9 0200640401482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9 0200640402482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9 0200640403482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9 です。 <a charset="400-002-2-4" href="javascript:sendVideoLink('XMjc3MDQ1MzI=','0200640400482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9');">??</a> これが大本でこれを解析してるんでしょうか。 こういうのはどうやって解析すればいいのでしょうか? よろしくお願いします。
696 名前:nobodyさん mailto:sage [2008/06/07(土) 21:00:16 ID:???] 一部の0に1足してるだけじゃないの?
697 名前:nobodyさん [2008/06/07(土) 21:25:47 ID:8brPzE2o] >>696 ですが4つとは限らないんです。 このビデオは4つですが、者によっては8つとかになります。 それをどうやって特定してるのかがわかりません。
698 名前:nobodyさん mailto:sage [2008/06/07(土) 21:33:39 ID:???] >>697 youkufireかなんかAPI使ってるんだろ。 Perlとは関係ないな。
699 名前:nobodyさん [2008/06/07(土) 21:43:36 ID:8brPzE2o] >>698 ??? それではyoukufireではどうやってやってるんでしょうか? こういうのってどういうスレに行くと知ってる人がおられるのでしょうか? フラッシュ関連なのでしょうか? 自分はPerlをかじる程度しか知らないのでついここに来てしまったのですが。 アドバイスお願いします
700 名前:nobodyさん mailto:sage [2008/06/07(土) 22:34:21 ID:???] HTTPに関して勉強して下さい。 全くのスレ違いです。
701 名前:nobodyさん [2008/06/07(土) 22:55:37 ID:8brPzE2o] http??? 他で質問してみます。ありがとうございました。
702 名前:nobodyさん mailto:sage [2008/06/07(土) 23:03:35 ID:???] いや、どこで質問しても無駄だと思うよ。 結局、HTTPレスポンスを解析する必要があるから。 そして、HTTPレスポンスの意味を把握するには、 sidなどユニークなIDのパターン解析と youkuで使われてるファイル取得swfの内部解析も必要。 この意味が分からない次元じゃ、到底ムリ。
703 名前:nobodyさん [2008/06/07(土) 23:36:39 ID:8brPzE2o] なるほど。 www.kasai.fm/perlHTTP/ www.kasai.fm/perlHTTP/decode.html からとりあえずそのhttpレスポンスとやらを実際に見てみようと思いましたが。 どうもCan't locate BASE64 in @INC エラーがでまして。 このモジュールをactiveperl5.8.1のppm(リポジトリは初期状態のまま1つです)でいれようとしましたが ない模様です。 MINE::Base64って自分でコンパイル?でしたっけができないとダメなものなのでしょうか。
704 名前:nobodyさん [2008/06/07(土) 23:53:12 ID:8brPzE2o] すいません getHTTPの #use MIME::Base64; require('BASE64'); を use MIME::Base64; #require('BASE64'); にしたらエラーが出ませんでした。動いてるかはわかりませんが。
705 名前:nobodyさん mailto:sage [2008/06/08(日) 00:05:22 ID:???] MIME::Base64は標準モジュールだ。 というか、質問内容が初心者未満の単なる教えて君だぞ。 最低限、ドキュメント読むかググってから書き込め。
706 名前:nobodyさん [2008/06/08(日) 00:14:24 ID:Mcg1bojL] そうなんですか。とりあえずperlでwebページを読み込む実験は成功しました。 そこからフラッシュのURLを抜き出すところまではできそうです。 >sidなどユニークなIDのパターン解析と >youkuで使われてるファイル取得swfの内部解析も必要。 これを検索とか意味を探してきます。
707 名前:nobodyさん mailto:sage [2008/06/08(日) 14:55:02 ID:???] オブジェクトにメソッドを足すにはどうしたらいいでしょうか? package foo; *{foo::hoge::bar} = sub {1}; $hoge = foo->hoge; $hoge->bar(); Can't locate object method "hoge" via package "foo" アレ?
708 名前:nobodyさん mailto:sage [2008/06/08(日) 16:56:29 ID:???] >>707 基本から一通り勉強し直したらいいんじゃないかな。 www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html www.kt.rim.or.jp/~kbk/perl5.005/perlobj.html
709 名前:nobodyさん mailto:sage [2008/06/08(日) 18:03:33 ID:???] >>708 サンクス 最後のページ Summary なすべきこと。今、あなたは部屋を出てオブジェクト指向方法論に関する書籍を購入して、そして六ヶ月かそこらの間悩む必要があるでしょう。 ワロタ
710 名前:nobodyさん [2008/06/08(日) 18:41:29 ID:NYonUevm] うーん継承させても hoge { $this = shift; return $this; } bar{1} hoge->bar()ってやったら呼べるんだけどbarはhogeと同じ空間にあるのが変というか つまり単純化するとこんな感じ。 *{foo::hoge::bar} = sub {1}; print foo->hoge->bar(); エラー print foo::hoge::bar->(); 動くが気もい *{foo::hoge::bar} = sub {1}; #もっとキモイ $top = foo::hoge; print eval ($top ."::bar"); 勉強してきます しかしあんま資料ないっぽい
711 名前:nobodyさん mailto:sage [2008/06/08(日) 18:52:18 ID:???] OOPじゃなくて、perlの基本からやり直しては。 *{foo::hoge::bar} じゃなくて *{foo::bar} hogeなんていうpackage作ってないし。
712 名前:nobodyさん mailto:sage [2008/06/08(日) 19:09:16 ID:???] > hogeなんていうpackage作ってないし。 ! それだ! ありがとうやっとわかったよ。 てっきり package a::b::c; ってやると a a::b a::b::c ってのが自動的に生成されると思ってた。
713 名前:nobodyさん mailto:sage [2008/06/08(日) 20:02:49 ID:???] パッケージじゃなくてオブジェクトに生やしたいの? 見かけ上はできるけだろうけどPerlのオブジェクトは名前空間に変数結び付けてるだけだからなあ と思ったけどもう一度勉強した方が良さげだね
714 名前:nobodyさん mailto:sage [2008/06/08(日) 20:20:35 ID:???] Perl DBI MySQL CGIであるデータをホームページ上に表示することをやっています。 5000件ほどのデータをfetchrow_arrayで1行ずつフェッチしていますが どうもフェッチ処理に時間がかかっているようです。 実際に必要なのは20件ほどで、他はページ送りで表示可能。 検索エンジンの検索結果ページなんかをイメージしていただければ。 そこで、不要なフェッチを無くすために、 複数行を飛ばしてフェッチすることってできますか? もし他に改善策があれば教えてください。 一応、SELECTの段階で20件だけを取り出す方法を思いつきました。
715 名前:nobodyさん mailto:sage [2008/06/08(日) 20:39:35 ID:???] >> 714 @array の展開はコスト食うのでやめたほうがいいかもね。 @arrayの高速操作が必要ならスライス操作とか調べてみると吉 SELECTで絞れるなら断然そっちのほうが早いと思うよ。
716 名前:nobodyさん mailto:sage [2008/06/08(日) 22:10:54 ID:???] >>715 ありがとうございます。 スライス操作調べてみました。SELECTでLIMITつければいいんですかね? これで必要な分だけのフェッチですみましたが、どうも時間がかかるようです。 ちょっと複雑なSQL文なんでそっちのほうがボトルネックのようですorz SQL文のほうを考え直そうと思います。
717 名前:nobodyさん mailto:sage [2008/06/09(月) 12:35:45 ID:???] SELECT SQL_CALC_FOUND_ROWS * FROM $table LIMIT ( $page*20+1 ), 20; SELECT FOUND_ROWS(); >>715 >>716 はSQLの話じゃなくて、 大規模の配列使うなって話で、 my @temp = splice( @array, 0, 20 ); 的なことでしょ。 SQL文はスレ違い。
718 名前:nobodyさん mailto:sage [2008/06/09(月) 15:41:11 ID:???] もうメンドクセーから、bind_columns()とfetch()にすれば? 生えーぞ。
719 名前:nobodyさん mailto:sage [2008/06/09(月) 16:00:10 ID:???] 生いいよね
720 名前:nobodyさん [2008/06/09(月) 19:29:41 ID:BYZvhcIN] LIMITしらねーとか そんなレベルなら 其の都度ひっかかって質問するより勉強したほうがはやいよ リファレンスページみっけてプリントアウトしとけ
721 名前:nobodyさん mailto:sage [2008/06/09(月) 23:24:50 ID:???] 122 11 11000 ↑これをソートすると 11 11000 122 ↑こんな風になってしまいます。 11 122 11000 ↑こんな感じで大きい順にソートする方法を教えてください。
722 名前:nobodyさん mailto:sage [2008/06/09(月) 23:26:19 ID:???] sort { $a <=> $b } ( 122, 11, 11000 ) ;
723 名前:nobodyさん mailto:sage [2008/06/09(月) 23:36:47 ID:???] >>722 さん、ありがとうございました。
724 名前:nobodyさん mailto:sage [2008/06/13(金) 02:38:01 ID:???] ファイルのアップロードについて質問です *** form.html *** <input type="file" name="gazou1"> <input type=その他 ...> *** form.cgi *** use CGI; $q = new CGI; @names = $q->param(); foreach $name (@names) { $value = $q->param($name); if (input type が file だったら ) { ファイル受信処理 } なんらかの配列に格納 } と、したいのですが、 inputのtypeは調べられないのでしょうか? inputのnameで判断するしかないのでしょうか?
725 名前:nobodyさん mailto:sage [2008/06/13(金) 09:17:11 ID:???] >>724 ブラウザから渡されるデータ自体に type 属性の値が含まれて いないのだから、CGI プログラム上から調べる事はできない。 ref $value でアタリを付ける事はできる。 perldoc.jp/docs/perl/5.10.0/perlfunc.pod#item_ref_EXPR_ref_reference perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod (「ファイル・アップロード・フィールドの作成」の項)
726 名前:nobodyさん mailto:sage [2008/06/13(金) 10:25:57 ID:???] @id には ( '101','106','112','130','150') などと入っており $unit->{101}->{point} = 2.5; $unit->{130}->{point} = 6.2; $unit->{150}->{point} = 3.2; と代入してあります このポイント(2.5、6.2等)を元にして@idをソートしたいのですが @id = sort { $unit->{$_}->point <=>$unit->{$_}->point } @id とまで考えて、$aや$bをどのように使ったら良いのか分らなくなりました よろしかったらどのように表記したら良いのか教えてください
727 名前:nobodyさん mailto:sage [2008/06/13(金) 10:51:23 ID:???] >>726 >>3
728 名前:726 mailto:sage [2008/06/13(金) 11:00:28 ID:???] ありがとうございます Perlメモはいつも参考にさせて頂いてまして ・複数の項目でソートする ・自分で決めた順番でソートする の応用でなんとかなるかと思ったのですが どうにも分らずこちらでお伺いしました次第です どの辺りを応用すればよろしいでしょうか?
729 名前:726 mailto:sage [2008/06/13(金) 11:18:24 ID:???] ・複数の項目でソートするを応用して(まんまかも) 先にmapでポイントの配列を作る事でなんとか出来ました @id = map { $_->[0] } sort { $b->[1] <=> $a->[1] } map { [$_,$unit->{$_}->{point} ] } @id ありがとうございました そしてお騒がせ致しました
730 名前:nobodyさん mailto:sage [2008/06/13(金) 11:37:27 ID:???] @id = sort { $unit->{$a}->{point} <=> $unit->{$b}->{point} } @id
731 名前:724 mailto:sage [2008/06/13(金) 12:09:38 ID:???] >>725 やはりtypeは知りようがないのですね。 ご回答ありがとうございました。
732 名前:726 mailto:sage [2008/06/13(金) 12:41:47 ID:???] なるほど、$_ がキーになる場合はそこが$a,$bの対象になるんですね コードがすっきりしました >>730 さん、ありがとうございます
733 名前:nobodyさん mailto:sage [2008/06/13(金) 12:51:42 ID:???] >>732 sortでなんで$_がでてくるのかわからない。$aと$bしかないだろ。 grepやmapと混乱してないか?
734 名前:726 mailto:sage [2008/06/13(金) 13:06:56 ID:???] Perlメモのを応用しようとしていじくりまわして >>726 のソースに間違えて辿り付いたので勘違いしてました てっきり配列の要素を引っ張り出したらそれが$_になるのかと・・・ で、$a,$bはそれが直接比較の対象にならないといけないのかと勘違いしてました orz
735 名前:nobodyさん mailto:sage [2008/06/14(土) 03:33:00 ID:???] 俺も今多次元ハッシュ使ってるけどコツがわかると便利で気に入ってる。
736 名前:nobodyさん mailto:sage [2008/06/15(日) 00:12:38 ID:???] ちょっとした構造体風の物を作るのにいいよね リファレンスで受け渡しも簡単だし
737 名前:nobodyさん mailto:sage [2008/06/15(日) 01:14:21 ID:???] WinXPPro+Cygwin、iswebでperlを作成しています。 普段は問題なく動いているのですが、自宅で試したperlをiswebにアップロードする作業が面倒でたまりません。 そこで質問なのですが、 #!/usr/local/bin/perl とかの表記を書き換えずとも、上記二つの環境の両方で動くように出来ないでしょうか。 毎度毎度アップロードするときに、全cgiを書き換えているので、そこだけでも何とかしたいんです。 もしくは、専用のFTPソフトみたいなので、アップと同時に書き換えてくれるような奴があると良いなぁって思ってます。 どなたか、よろしくお願いいたします。
738 名前:nobodyさん mailto:sage [2008/06/15(日) 01:43:19 ID:???] それこそローカルと同期させる専用FTPクライアントをPerlで作れよw Net::FTP使えば、30分程度で作れるだろ。
739 名前:nobodyさん mailto:sage [2008/06/15(日) 01:43:42 ID:???] っ coLinux っ ActivePerl をC:\usr\local\以下にインストール っ 「メンドクセーっ! 頭 #!perl に統一してやんよ。」(Path通ってなかったら知らん)
740 名前:738 mailto:sage [2008/06/15(日) 01:45:20 ID:???] 単純にPerlのパスが違うって問題なら、 XPでエイリアス作れるようにするソフト使って、iswebに合わせればいい。
741 名前:nobodyさん mailto:sage [2008/06/15(日) 01:52:33 ID:???] >>737 ■サーバー #!/usr/local/bin/perl require "example.cgi"; ■ローカル #!C:/perl/bin/perl require "example.cgi"; これなら、example.cgi をアップするだけでOKです。 (意味が違うでしょうか??)
742 名前:nobodyさん mailto:sage [2008/06/15(日) 02:10:08 ID:???] >>738-741 どうも、有難うございます。 >>741 さんのが一番楽そうなので、それでいこうと思います。 どうもありがとうございました。
743 名前:nobodyさん mailto:sage [2008/06/15(日) 14:41:47 ID:???] Perlでコードを書き始めたばかりの物なのですが、基本が少し分からないので質問させて下さい。 PerlでCGIを作っているのですが、いくつかのフォームから入力を取ろうと考えています。 フォームが一箇所ではないので(検索や書き込み、削除等)、送られて来る処理が全く違うため、 送られて来たフォームによって処理を変えたいです。 例えば、検索ならこの関数、書き込みならこの関数、のように分けたいのですが、どのように 実装するのがスマートな方法でしょうか? 考えているのはhiddenで、フォーム別の値を持っておきその値によって分岐しようと思っている のですが、他にスマートな方法があれば知りたいです。 宜しくお願いします。
744 名前:nobodyさん mailto:sage [2008/06/15(日) 14:43:16 ID:???] >hiddenで、フォーム別の値を持っておきその値によって分岐 これが一番一般的で分かり易いと思うよ
745 名前:nobodyさん mailto:sage [2008/06/15(日) 15:43:06 ID:???] ところでお前ら、 postとらgetを使うときのデバッグってどうしてる? コマンドラインからPOSTを設定する方法とかあるの? めちゃめちゃ大変なんだが
746 名前:nobodyさん mailto:sage [2008/06/15(日) 17:13:16 ID:???] >>743 仕様によりますが、動作の種類によって、 スクリプトそのものを分けてしまうのはどうでしょう。
747 名前:nobodyさん mailto:sage [2008/06/15(日) 17:51:51 ID:???] 受け取った値も表示するようにするかテキストに吐かせてるだけだけど、 そんなに面倒?
748 名前:nobodyさん mailto:sage [2008/06/15(日) 17:55:33 ID:???] 何をやってるのかよくわかんないけど、どうやってコーディングするかという問題より、 postでもgetでも、与えられる引数をちゃんとチェックすることで、自然と動作の分岐が行えると思うんだけど
749 名前:nobodyさん mailto:sage [2008/06/16(月) 02:30:03 ID:???] 質問者の想定とは違うかもしれないが、 | ̄ ̄ ̄ ̄| [検索] [管理] [ほげほげ]  ̄ ̄ ̄ ̄ みたいな感じなら、submit に文字列を仕込むという方法が。
750 名前:nobodyさん mailto:sage [2008/06/16(月) 10:59:18 ID:???] でも文字化けという問題が... ラジオかセレクト使えばいいと思う。 それかAjaxか
751 名前:nobodyさん mailto:sage [2008/06/16(月) 11:58:23 ID:???] >>745 普通はユニットテスト用のロボット作るんじゃね? 使ってないけど、モジュールも何種類かあるはず。
752 名前:nobodyさん mailto:sage [2008/06/16(月) 12:17:52 ID:???] じゃあ、まずは画面を見て情報を処理しキーボード操作する ロボットのAIの開発からしなきゃだな。
753 名前:nobodyさん mailto:sage [2008/06/16(月) 12:26:02 ID:???] >>752 そのAIのデバッグはどうするんですか。
754 名前:nobodyさん mailto:sage [2008/06/16(月) 12:53:21 ID:???] ニワトリが先か タマゴが先か
755 名前:nobodyさん mailto:sage [2008/06/16(月) 23:32:06 ID:???] 真ん中をとってヒヨコが先だ
756 名前:nobodyさん mailto:sage [2008/06/17(火) 00:45:20 ID:???] >>745 CGI.pm を使うなら use CGI qw(-debug);
757 名前:nobodyさん mailto:sage [2008/06/17(火) 10:41:46 ID:???] >>745 実際に色々な条件でPOST、GETさせてみて、 おかしくなったらそのつど、修正します。 あとは、スクリプトをWEB上にアップしている場合、 ユーザーの方からのバグ報告フォームを設けておくと、 問題発見が早くなります。 コマンドライン POSTで検索: www.google.co.jp/search?hl=ja&rls=GFRC%2CGFRC%3A2007-04%2CGFRC%3Aja&q=%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%80%80POST&lr=
758 名前:nobodyさん mailto:sage [2008/06/17(火) 12:33:48 ID:???] >>757 500が帰ってきたとき、どこが悪いかどう見当つけてるかってはなしでしょ
759 名前:nobodyさん mailto:sage [2008/06/17(火) 14:47:07 ID:???] なんでTest関係のモジュール使わないの?マゾなの?
760 名前:nobodyさん mailto:sage [2008/06/17(火) 16:37:40 ID:???] 世の中には君の環境と違う環境の人もいるのだよ
761 名前:nobodyさん mailto:sage [2008/06/17(火) 18:26:54 ID:???] > 世の中には君の環境と違う環境の人もいるのだよ 意地はってないで、「わかりません!教えてください!」っていうのがオトナだよ
762 名前:nobodyさん mailto:sage [2008/06/17(火) 18:42:33 ID:???] > 意地はってないで、「わかりません!教えてください!」っていうのがオトナだよ 意地はってないで、「詳しいことはわかりません!!」っていうのがオトナだよ
763 名前:nobodyさん mailto:sage [2008/06/17(火) 18:53:23 ID:???] www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GFRC,GFRC:2007-04,GFRC:ja&q=perl+%e3%83%81%e3%82%a7%e3%83%83%e3%82%af
764 名前:nobodyさん mailto:sage [2008/06/18(水) 12:33:38 ID:???] つまらん('A`)1
765 名前:nobodyさん mailto:sage [2008/06/18(水) 14:54:32 ID:???] Encode::guess_encoding の結果が shiftjis or euc-jp ってなったときで困ってます。 guess_encoding のあとに $utf8 = $enc->decode($inputkeyword); とやってるのですが、エラーとなります。 「 or 」 で split して my $utf8 = Encode::decode($EncType[0], $inputkeyword); のようにしたりするのが一般的なんでしょうか? それとも Encode::decode する際に優先順位を決めたり出来て、それで decode できちゃったりするもんでしょうか?
766 名前:nobodyさん mailto:sage [2008/06/18(水) 15:02:39 ID:???] >>765 一般的かどうかは知らんが、俺は JEncode::_func_getcode() みたいな ラッパーを書いて使っている。 www.donzoko.net/source/JEncode/JEncode.pm
767 名前:nobodyさん mailto:sage [2008/06/18(水) 15:25:31 ID:???] >>766 ありがとうございます。 _func_getcode と _ambiguous、_test_mojicode を見ながら実装します。
768 名前:nobodyさん mailto:sage [2008/06/20(金) 01:13:32 ID:???] @X0(a,b,c); @X1(d,e,f); と二つリストを作って、 $Y = int(rand(2)); で$Yに0か1を入れて、それに対応したリストを使いたいのですが、どうすればいいですか? print "$X"$Y"[1]"; のような感じにしたいのですが…。
769 名前:nobodyさん mailto:sage [2008/06/20(金) 01:41:21 ID:???] print @{'X'.$Y};
770 名前:nobodyさん mailto:sage [2008/06/20(金) 01:43:48 ID:???] あ、スライスか print @{'X'.$Y}[1];
771 名前:nobodyさん mailto:sage [2008/06/20(金) 01:53:59 ID:???] >>770 カッコイー こんな風にしてた。 $Y = 'X'. int(rand(2)); print ${$Y}[1]; 横からスマソ
772 名前:768 mailto:sage [2008/06/20(金) 02:20:58 ID:???] >>769-771 素早い回答ありがとうございます。
773 名前:nobodyさん mailto:sage [2008/06/20(金) 08:10:04 ID:???] >>769-771 今時シンボリックリファレンスはやめとけ。 use strict; my @X = [[a,b,c], [d,e,f]]; print $X[0]->[1]; # ==b ($X[0][1] とも書ける) print $X[1]->[2]; # ==f
774 名前:770 mailto:sage [2008/06/20(金) 12:31:24 ID:???] >>773 >>768 に言ってくれ 前提条件に合わせてわかりやすく書いただけだ
775 名前:768 mailto:sage [2008/06/21(土) 17:41:30 ID:???] 昔やってたEBSってゲームを引っ張り出して弄ってる初心者なので、 バカの一つ覚え状態でかいてます>< >>773 の書き方は始めてみました。 ありがとうございます。
776 名前:nobodyさん mailto:sage [2008/06/21(土) 17:48:55 ID:???] ここらへんにいる連中にへりくだる必要ないと思うよ。
777 名前:nobodyさん mailto:sage [2008/06/21(土) 23:46:21 ID:???] 配列やハッシュでリファレンスを使うことを覚えると、かな〜り違うよ。
778 名前:nobodyさん mailto:sage [2008/06/22(日) 01:48:39 ID:???] >>773 s[\[\[.*\]\]][([$1])]
779 名前:778 mailto:sage [2008/06/22(日) 01:49:38 ID:???] s[\[\[(.*)\]\]][([$1])] # キャプチャし忘れたorz
780 名前:nobodyさん mailto:sage [2008/06/22(日) 02:10:15 ID:???] perlにjavaの.propertiesファイルみたいなのはないでしょうか? ちょっとしたデータをファイルの中にまとめておければ便利だと思っているのですが、 そのような奴があれば、助かります。どなたかご教授ください。
781 名前:nobodyさん mailto:sage [2008/06/22(日) 02:24:11 ID:???] >>780 Data::Properties
782 名前:nobodyさん mailto:sage [2008/06/22(日) 13:05:18 ID:???] 外部コマンドの出力結果の取り込みがうまくいきません、なぜなんでしょうか? open(COM_RET, "ping -n 10 192.168.100.1 |"); while ($data_line = <COM_RET>) { print $data_line; }; close(COM_RET);
783 名前:nobodyさん mailto:sage [2008/06/22(日) 13:27:13 ID:???] なにも表示されないってこと? pingコマンドは存在する? openの後に$|=1;したら表示される? for (`ping -n 10 192.168.100.1`){print;}ではどう?
784 名前:782 mailto:sage [2008/06/22(日) 13:28:07 ID:???] すみません。 プログラムの保存先を間違えていました。
785 名前:nobodyさん mailto:sage [2008/06/25(水) 22:01:59 ID:???] Google Wireless Transcoder経由でアクセスされるとpostで送信されてくる フォームのデータがおかしくなってたことありませんか? たとえば、なにも入力しなかったinputフォームの値が全て文字列の"VALUE"に なったり・・・
786 名前:rubi [2008/06/26(木) 00:32:36 ID:P35F8OvT] system関数で外部コマンドを実行する際、その引数にプログラム内で使用しているスカラ変数の内容を指定するのにはどうすればいいのでしょうか?
787 名前:nobodyさん mailto:sage [2008/06/26(木) 00:55:50 ID:???] system($cmd $arg1 $arg2 ・・・); 引数中にスペース等ある時は、 system qq($cmd "$arg1" "$arg2" ・・・);
788 名前:nobodyさん mailto:sage [2008/06/27(金) 16:35:38 ID:???] すみません知恵を貸してください。 こんなファイルがあります → 項目\tデータ\n 中には同じ項目でデータ違いがあります。 100\t百\n 100\t百円\n 100\t百円玉\n 同じ項目は一つで良いので一番データの短い100\t百\nを残して 残りの長い二行を削除したいと考えています。 何か良い方法は無いでしょうか。 短いデータのみ残したいので配列の重複削除サンプルは そのままでは利用不可でした。
789 名前:788 mailto:sage [2008/06/27(金) 16:38:10 ID:???] …と、そもそも重複ではないですね。 重複サンプル〜以下は忘れてください。
790 名前:nobodyさん mailto:sage [2008/06/27(金) 17:02:39 ID:???] とりあえず書いてみろ
791 名前:788 mailto:sage [2008/06/27(金) 17:30:24 ID:???] 普段はスカラーと配列くらいしか使ってません。 項目もデータもバラバラなので方法が思いつかなくて。
792 名前:nobodyさん mailto:sage [2008/06/27(金) 17:41:01 ID:???] 連想配列
793 名前:788 mailto:sage [2008/06/27(金) 17:59:26 ID:???] 初めは$DATA{項目} = データ; で一つだけ残そうと考えました。 そうじゃなくて、連想配列にしてデータサイズでソートとかあるんでしょうか? 分かりません(><)
794 名前:nobodyさん mailto:sage [2008/06/27(金) 18:21:02 ID:???] 連想配列にしてデータサイズでソートすりゃいいだろ
795 名前:nobodyさん mailto:sage [2008/06/27(金) 18:27:40 ID:???] 書かないってことはまだなにも書けない状態ってこと? まずはopenでファイル開けるの解かる?
796 名前:788 mailto:sage [2008/06/27(金) 18:50:29 ID:???] >>795 連想配列に入れてみました。 my %DATA; open R, "koumoku.txt" or die; while (<R>) { chomp; my ($key, $value) = split(/\t/); $DATA{$key} = $value; } close R; データサイズでソートは後でググってみます。 項目ごとに最短データだけ残す方法は今の時点で想像できません。。
797 名前:nobodyさん mailto:sage [2008/06/27(金) 19:15:25 ID:???] そこまで出来てるならあとは場合わけでしょ if (exists $DATA{$key}){ length($DATA{$key}) > length($value) and $DATA{$key}= $value; } else { $DATA{$key}= $value; }
798 名前:nobodyさん mailto:sage [2008/06/27(金) 19:47:44 ID:???] >>797 食事してて遅れました。 そのままコピペしたのですが望むとおりです完璧です。 項目ごとに一番小さいデータが残る。凄い考え付かない。 本当にありがとうございました。
799 名前:nobodyさん mailto:sage [2008/06/28(土) 13:36:15 ID:???] ◆◆◆◆◆◆◆◆◆毎日新聞社による日本人への誹謗中傷◆◆◆◆◆◆◆◆◆ ・母親は受験勉強をする息子の学力向上のためにフェラチオをする ・日本人女性の55%は、出会ったその日に男と寝る ・ファストフードは女子高生たちを性的狂乱状態におとしいれる ・ティーンたちはバイアグラを使ってウサギのようにセックスをする ・女子高生は、刺激のためにノーブラ・ノーパンになる ・日本の最新の流行 : 70歳の売春婦 ・老人の売春婦の人気にもかかわらず、日本では小学生の売春婦にも仕事がある ・日本の若い看護婦は売春婦に勝る ・24時間オルガズムが止まらない病気で苦しむ日本人女性の数が増えている ・15未満の子供を対象とした疑似ポルノが日本に蔓延している ・OLの72%が、セックスをより堪能するために何らかのトレーニングを受けている ・人妻は気分転換の目的で昔の恋人に抱かれに行く ・主婦は郊外のコイン・シャワーで売春をしている ・日本男子は柔道や空手の部活で男相手に童貞を捨てている ・ほとんどすべての漁師は海でマンタとSEXしている ・まだ10代の少年から退職した老人までみんな2980円の手コキを利用している ・六本木のあるレストランでは、食事の前にその材料となる動物と獣姦する ※同社が全年齢向けコーナーで七年以上にわたり世界に向けて配信していたものの一部です ※同社の行為は日本人への偏見や人種差別、婦女暴行、幼児虐待を助長するものです ◆毎日新聞の英語版サイトがひどすぎる まとめ@wiki www9.atwiki.jp/mainichiwaiwai/ ◆毎日新聞問題の情報集積wiki www8.atwiki.jp/mainichi-matome/ つまり日本人なら www.vipper.net/vip552788.jpg
800 名前:nobodyさん [2008/06/29(日) 21:21:31 ID:ib7dTQ8m] シンタックスハイライト用のモジュールでオススメってありますか? Syntax::Highlight::Engine::Kateはちょっと好みじゃなかったのと、 Text::Highlightは今のところ使い方が分からないの。
801 名前:nobodyさん mailto:sage [2008/06/29(日) 21:37:01 ID:???] Text::VimColor
802 名前:nobodyさん mailto:sage [2008/06/29(日) 23:14:30 ID:???] ありがとう。日本語が上手くいかず。
803 名前:nobodyさん [2008/07/03(木) 04:34:06 ID:N0WlacZt] 日本人がイスラム過激派に狙われる可能性もあります 220 名前: 名無し三等兵 [sage] 投稿日: 2008/06/30(月) 00:35:59 ID:??? イスラムや胡錦濤の記事にもhentai入ってて ニュー速の連中がアルジャジーラとかにメールしようとして 鬼女が止めに入ったり、なかなかわかってるなぁと。 262 名前: 名無し三等兵 [sage] 投稿日: 2008/06/30(月) 00:43:47 ID:??? つーか原理主義者は日本に入り込んでいるし組織もあるから 原理主義者によって白昼堂々人通りのある場所で首を掻き切られて 助教授が殺されて犯人が何も特定できていないわけで・・・ 297 名前: 名無し三等兵 [sage] 投稿日: 2008/06/30(月) 00:51:28 ID:??? >>272 いや・・・それが・・・ タレコミより前に韓国でコーランが焼かれたと報道されてて アルジャジーラTVより韓国でコーランを燃やす映像が放映され、アラブ諸国でさまざまの反応が出ている。 ・その映像を見た老人がショック死(サウジアラビア) ・その映像を見た青年ら十数人が韓国大使館に投石(シリア) ★祭り★ 「日本の母は息子の性処理係」毎日新聞が捏造記事41 human7.2ch.net/test/read.cgi/ms/1215003832/ ★祭り★ 【毎日・変態報道】 毎日新聞、「2ちゃんねる」を名指し…「女性社員中傷書きこみで法的措置」で★26 mamono.2ch.net/test/read.cgi/newsplus/1215016627/ 【記者】毎日新聞の英語版記事で日本を侮辱【豪人】 academy6.2ch.net/test/read.cgi/english/1213971760/ 【Daily】毎日新聞英語版がひどすぎる 3【WaiWai】 society6.2ch.net/test/read.cgi/mass/1214603376/ 【毎日新聞】 iチャネル解約スレ 【変態報道】 hobby11.2ch.net/test/read.cgi/keitai/1214802475/