1 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:54:12 ] "The duct tape of the Internet" こと、Perlについての質問箱です。 "There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。 CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 (WEBプログラミング板 pc8.2ch.net/php/ ) CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 www.perl.org/get.html ● 2006/12/21現在の最新版: 5.8.8 ● 2006/12/21現在の開発版: 5.9.3 前スレ Perlについての質問箱 29箱目 pc11.2ch.net/test/read.cgi/tech/1166708139/ リンク集は>>2-3 過去スレは>>4
403 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 22:28:17 ] s///gが一種のループなのでこんな手もある。 my $mode; $text =~ s{($regexp)}{ my $r; if (!defined $mode) { my $key; do { print "置換する? [y]es [n]o [a]残り全て [g]キャンセル "; $key = <STDIN>; chomp($key); } while ( $key ne "y" and $key ne "n" and $key ne "a" and $key ne "g" ); if ($key eq 'y') { $r = $replace; } elsif ($key eq 'n') { $r = $1; } elsif ($key eq 'a') { $mode = 'a'; } else { $mode = 'g'; } } if ($mode eq 'a') { $r = $replace; } elsif ($mode eq 'g') { $r = $1; } $r; }gme;
404 名前:395 [2007/05/01(火) 23:34:11 ] >>402-403 おお、これはすごい、正規表現でループができるんですね。 >>403 の方法できれいなスクリプトになりました。ありがとうございます。
405 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 03:13:40 ] CPANシェルについてなんですが、 インストールするごとに[1]とか[2]とか増えるのはなんなんでしょうか?
406 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 03:44:02 ] >>405 現在実行したコマンドを識別するIDみたいなもの。 何に使ってるかまでは見てないけど。 ちなみに↓とやるとIDを変えてしまうこともできる。特に意味はない。 cpan[1]> ! $CPAN::CurrentCommandId = 100;
407 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 05:56:50 ] >>406 レスありがとうございます。 そうなんですか。 なんか Bundle::CPAN をインストールしてからそうなったような気がしたので、 間違えたかと思いました。 そのような情報ってどこで得ているのでしょうか?
408 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 09:35:32 ] モジュール(lib/CPAN.pm)のコードを読む。
409 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 14:03:43 ] >>406 知らないけど、ヒストリ用では? よくUNIX用のシェルであるんだけど、 ! の直後にその番号入れて 実行するとその番号のコマンドが動くんだよ。全く同じなら再入力 する必要がないの。(更に後ろに :s/// のようなのを付けて文字列 置換できたりもする。 !30:s/aa/bb/ みたいな。全てのシェルが 同じこと出来るかどうかは知らないが)。
410 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 21:18:49 ] cpanpのメリットがイマイチわからん
411 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 21:20:37 ] 最近CPAN.pmがだいぶ進化したからCPANPLUS.pmの意義が相対的に薄くなったしねー
412 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 06:35:39 ] awkは多少かじったのですが、perlはまるっきりの初心者です。どなたかお知恵を貸して下さい。 2つのファイル a.txt と b.txt を比較して、条件にあった行を抽出、出力するスクリプトを作りたいのです。 具体的には、 [a.txt] ID, field1, field2 1, 5.8, 7.3 2, 6.3, 8.2 3, 3.2, 4.1 4, 4.8, 4.0 5, 8.3, 10.2 [b.txt] ID, field1, field2 1, 6.8, 7.7 3, 4.3, 5.5 4, 5.9, 4.9 というファイルがあったとき、b.txt のIDに数値が存在する行だけを a.txt から抽出して a2.txt として保存したいのです。 [a2.txt] ID, field1, field2 1, 5.8, 7.3 3, 3.2, 4.1 4, 4.8, 4.0 と言った具合にです。よろしくお願いします。
413 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 07:47:00 ] #!/usr/bin/perl use strict; use warnings; open my $a, '<', 'a.txt' or die; open my $b, '<', 'b.txt' or die; my %ids = map { $_ => 1 } map { (split /,/)[0] } <$b>; while (<$a>) { my $id = (split /,/)[0]; print if $ids{$id}; }
414 名前:412 mailto:sage [2007/05/03(木) 08:00:05 ] >>413 さま 早速のレス、ありがとうございます。助かりました。 こんなに簡単にできちゃうんですね。しかし、私にはスクリプトの内容は不明...。解読して勉強させていただきます。
415 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 13:36:22 ] use IO::File; sub func { my $file = shift(@_); my $input = IO::File->new($file,"r") or die; ごにょごにょ ・ ・ } $filename = (ディレクトリからファイルネームをとるロジック); &func($filename); みたいに書くと、一番最初にいきなりファイルオープンのエラーが出ます。 その後、ファイルネームをとるロジックが走ってる模様…。 何故か解らないのですが原因解りますでしょうか。
416 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 13:48:01 ] >>415 原因はわかりますよ。 あんたが、そう動くようにプログラムを作ったから。
417 名前:415 mailto:sage [2007/05/03(木) 13:53:53 ] >>416 早い回答ありがとうございます。 やっぱり自分が悪いんですね。 調べてみます。
418 名前:415 mailto:sage [2007/05/03(木) 14:26:25 ] うーんやっぱり解らない…。 サブルーチンが先に実行される事なんてあるのか…?
419 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 14:50:10 ] >>415 まあエラーメッセージでも貼ってみ
420 名前:415 mailto:sage [2007/05/03(木) 15:05:12 ] >>419 そのようなファイルやディレクトリはありません at (何行目) としか出ないんですが…。
421 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 15:08:03 ] >>420 訳したりせずにそのまま貼れ
422 名前:415 mailto:sage [2007/05/03(木) 15:16:54 ] そのようなファイルやディレクトリはありません at test.pl line 32. だけです。 CentOS4.4、perl5.8.5です。
423 名前:415 mailto:sage [2007/05/03(木) 15:30:01 ] フルパス指定してなかった…。 >>422 さん、親身になってくれてありがとうございます。 くだらないミスで申し訳ありません。 本当にすみませんでした。
424 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 15:40:40 ] >>423 s/422/421/g;
425 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 15:47:38 ] 突っ込みどころはいろいろあるけど、エラーメッセージは自分のためにも他人のためにもわかりやすくすべし。 my $fp_in = IO::File->new($filename, "<") or die qq(cannot open '$filename': $!);
426 名前:415 mailto:sage [2007/05/03(木) 16:07:57 ] >>425 了解です。ただ or die $!;だけしてました。 連休中にコメントありがとうございました。
427 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 14:17:50 ] chompって何の略ですか?
428 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 14:26:54 ] >>427 略じゃないよ。 噛み切るとかそんな感じ。
429 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 14:41:24 ] chomp 【自動】 〜をムシャムシャ食う◆【同】champ
430 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 14:43:41 ] へー。ありがとうございました。
431 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 15:30:31 ] オブジェクト指向で書いていないので、巨大モジュールの分割がうまいこといかんのです>< 具体的には、親パッケージが子パッケージをuseしているとき、 子パッケージから親パッケージのサブルーチンを呼べません。 Giko.pm [------- package Giko; use Giko::Mona; (omaemonaサブルーチンをEXPORTしている) sub omaemona { .... } -------] Giko/Mona.pm [------- package Giko::Mona; -------] となっていた場合、 Giko::Monaの中でomaemonaを呼ぶ方法は、Giko::omaemonaしかないでしょうか? Giko::Monaでuse Gikoはできないし、use base 'Giko';は違うみたいですし。
432 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 17:12:46 ] Encodeモジュールのfrom_toを用いて 「@」「A」や「T」「U」などを sjis <-> euc-jp 変換すると文字化けしてしまいます。 回避するにはどうすればいいでしょうか?
433 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 19:33:33 ] >>432 つEncode::EUCJPMSのcp51932
434 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 20:32:56 ] それは拡張文字なので、 sjis じゃなく cp932 を指定。
435 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 20:40:22 ] 単純に分割するなら、全部同じ名前空間に展開すればいいんじゃない Giko/Mona.pm [------- package Giko::Mona; package Giko; -------]
436 名前:431 mailto:sage [2007/05/06(日) 01:14:39 ] 遅レスで申し訳ないです。 >>435 なるほど。 まとめると巨大ファイルになりがちで不安だったのですが、 今のところはまだなんとか1ファイルにまとめられそうなので、 同じファイルスコープで仲良く共存してみます。 ありがとうございました。
437 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 17:12:14 ] 例 ( split /\//, $x )[0 .. bar]; リストの末尾要素を除いたリストを返す方法、知りませんか? barをどう記述すりゃいいのやら。 Perl ならできそうな気がするんですが。思い当たりません。 検索してみたものの、それらしいものも見つけられません。
438 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 17:31:22 ] ( @hoge, undef ) = split //, $foo ; じゃダメなの?
439 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 17:43:01 ] >>437 尻尾だけ消すのじゃだめなの?
440 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 17:44:40 ] 最後から2番目の要素をひとつ抜き出すだけなら (〜)[-1] でいいんだけど、範囲演算子で(〜)[0..-1]とは書けないんだよな。 配列変数なら@x[0..$#x-1]という書き方もあるが、リストでは$#xに 相当するものが書けない。 とりあえずおもいついたのはこれ。 sub{@_[0..$#_-1]}->(〜)
441 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 18:03:14 ] >>437 @list = split(/\/(?=.+\/)|\/.+$/, $x) とかやってないで、全部入れてから$#list--すればいいんじゃね?
442 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 18:31:19 ] >>429 首チョンパの略と思ってた
443 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 18:38:52 ] まずchopありき。 やがてより安全なchomp生まれり。
444 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 18:52:28 ] え…普通にpop関数じゃだめなの
445 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 19:51:31 ] popの第1引数は左辺値つーかARRAYじゃないと×じゃ?
446 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 20:19:01 ] splice @{[split /\//, $x]}, 0, -1 というのはどうだ
447 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 20:35:56 ] ちょんぱ
448 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 21:07:48 ] # 悪い例 (split /\//, $x)[0..(split /\//, $x)-2]
449 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 21:21:14 ] >>448 scalar contextのsplitは@_を上書きしちゃうからねぇ。
450 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 22:19:22 ] (split m{/})[0..(s{/}{/}g)-1]
451 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 00:17:23 ] みんなよく頑張ったな。先生感心したぞ。 my $str = 'foo/bar/baz/quux'; sub p { printf ">>%d:[%s]\n", shift, join ',', @_ } p(438, (my @arr, undef) = split m{/}, $str); p(439, do { @arr = split m{/}, $str; pop @arr; join ',', @arr }); # & >>444-445 p(440, sub { @_[ 0 .. $#_ - 1 ] }->(split m{/}, $str)); p(441, split m{/(?=.+/)|/.+$}, $str); p(446, splice @{[ split m{/}, $str ]}, 0, -1); p(448, (split m{/}, $str)[ 0 .. (split m{/}, $str) - 2 ]); p(450, (split m{/}, $str)[ 0 .. $str =~ tr|/|/| - 1 ]); p(451, $str =~ m{(.+?)/}g);
452 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 00:52:33 ] >>451 my $str = 'foo/bar/baz/quux'; を my $str = '/foo/bar/baz/quux/'; にすると、いろいろ違いが出てくるね。
453 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 00:58:21 ] >>451 重箱の隅つつき。 p(451 の行の正規表現。(.+?) ではなく(.*?) でなければ split を用いた他の例と挙動が違うぞ。 $str = q{/foo/bar/baz/quux} で確かめろ。
454 名前:437 mailto:sage [2007/05/07(月) 01:10:11 ] 多くのお返事ありがとうございました。 >440 単純な範囲演算子で記述できそうに思った私が考え足らずだったようです。 sub { @_[0 .. $#_ - 1] }->(split /\//, $x) は見た目にわかり易いですね。 いろいろ応用できそうだし。しかし、私は露とも思い至りませんでした。 >441 まぁ、そうなんですよね。 $file = "/usr/local/bin/bar"; # ファイル名が与えられて。。。 $fold = join "/", 〜split /\//, $file を使った記述〜; # フォルダ名を得る。 ここで余分に変数を使わず、可読性も損なわない方法がありそな気がしたもので。 >446 splice の第一引数はARRAYしかダメだと諦めてしまったのです。 リファレンスについて熟知すると、こんなやり方に気付くんですね。 自分の頭の硬さとリファレンスに対する理解の浅さを恥じて 精進したいと思います。 まず、>440 さんと >446 さんの方法、どっちを使うか悩みます。
455 名前:デフォルトの名無しさん [2007/05/07(月) 01:17:53 ] >>454 いいからFile::Specを使え。
456 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 01:19:48 ] >>454 いや、可読性が低下するから、いったん配列に入れてからスライスした方がいいと思うぞ 上のは遊びなんだから
457 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 02:28:37 ] こういうよくありそうな処理が案外スラっとかけないもんなんだね。 Dだと [0 .. $ - 1] でいけるんだが。
458 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 05:57:16 ] >>456 しかし落ち着いて俯瞰すればこういう雑用の可読性を気にする時点でそのソース全体が残飯ですね。
459 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 08:33:53 ] 超初心者でふが良いですか? 標準のキーボードから入力を受け取ってどうやれば入力を反映させれるかわからないです・・・ #!/usr/local/bin/perl -w require 'jcode.pl'; print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n"; while(<>){ if($_=m/3/){print"これはこねこ"}; }; ↑これでは3を入力するたびに、これはこねこって出てくるんですが、 #!/usr/local/bin/perl -w require 'jcode.pl'; print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n"; while(<>){ if($_=m/3/){print"これはこねこ";$kyara=3} elsif($_=m/2/){print"これはゴーレム";$kyara=2}; }; これのelsif文が実行されないぽいんですがなんででふか? 頭硬くてすみません・・・
460 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 09:30:09 ] > $_=m/3/ でなにをやっているのか良く考えてみ。
461 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 11:52:54 ] >>460 さん> $_=m/3/ の部分を$_==3 にすると、うまく行きました! 最初$_==3でエラーが出て、良くわからなくて正規表現にすればうまくいくかなとか思って$_=m/3/に直して、(他の部分も少し直して、)それで3の時うまくいったのでてっきり正解かと思いこんでました。 $_=m/3/を$_==3と同じ意味で使ったつもりだったけど、動作は違うんですね。 もうちょっと調べてきます。 ありがとうございました。
462 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 12:40:19 ] うまくいきました! 正規表現、はじめてで意味もよく知らずに=m/3/とかしてたけど、=~/3/とするのが正しかったんですね(汗 ==3にすると数字以外の時の入力で(変数は数字ではありませんみたいな)無駄なエラーが出たけど=~/3/ならそういう変なエラーも出ないみたいなので=~/3/を使うことにしました! ↓ $kyara=4; while($kyara==4){ $_=<STDIN>; if($_=~/3/){print"これはこねこ";$kyara=3} elsif($_=~/2/){print"これはゴーレム";$kyara=2} elsif($_=~/1/){print"これはドラゴン";$kyara=1}; }; もうちょっとがんばってきます!
463 名前:連カキスマソ mailto:sage [2007/05/07(月) 13:11:33 ] もうちょっとがんばってきました(滝汗 if($_=~/3/){処理1} elsif($_=~/2/){処理2} とすると、3でも23でも32でも先に$_=~/3/にマッチしてしまう(32なんかは$_=~/2/にマッチさせたい)ので、ちょっと修正しました。 ↓ #!/usr/local/bin/perl -w require 'jcode.pl'; print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n"; $kyara=4; while($kyara==4){ $_=<STDIN>; if($_=~/3$/){print"あなたはお昼ね好きのこねこを選びました☆";$kyara=3} elsif($_=~/2$/){print"あなたはお人よしのゴーレムを選びました☆";$kyara=2} elsif($_=~/1$/){print"あなたは気の強いドラゴンを選びました☆";$kyara=1}; }; print "(番号=)$kyara"; ↑ これなら33111とかって入力でも3ではなく1のドラゴンとして判断してくれます☆ 正規表現って便利ですね☆ >>460 さん、アドバイスdクスでした!
464 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 13:18:31 ] 一つ攻略おめ そこで更に便利な連想配列をどうぞ
465 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 13:19:13 ] あっ、この場合だったら配列だけでいいのか
466 名前:460 mailto:sage [2007/05/07(月) 16:10:24 ] 462 なんか前向きなやつだなw どっかの知恵袋のとは大違いだ。 ちょっと補足しておくと、Perlの場合処理対象の 変数を省略できることが多い。 たとえば $_ =~ /1/ なら /1/とか。 $_ = m/1/ と書いちゃうと、マッチの結果を $_ に代入と解釈されて前の値を壊しちゃう。 ほかにもいろいろあるが長くなるので書かない。 まあがんばれ。
467 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 16:18:01 ] >>459 のチラ裏日記は、他人が見ても役に立ちそうだな。続けてくれ。
468 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 17:04:17 ] てか $inkey = <STDIN>; これで読み取ったときって改行コード入ってない? そこらへんも気をつけたほうがいいかな
469 名前:デフォルトの名無しさん [2007/05/07(月) 17:27:02 ] XML::Parser::PerlSAX のエラーハンドリングについて、どなたかご存知でしたら教えてください。 Parse対象のXMLにエラーがあった場合に、ユーザー関数をコールバックさせようと考えています。 デフォルトだと mismatched tag at line **, column **, byte ***, at /user/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/XML/Parser.pm line 187 のように出力されてdieします。
470 名前:デフォルトの名無しさん [2007/05/07(月) 17:27:31 ] search.cpan.org/~kmacleod/libxml-perl-0.08/lib/XML/Parser/PerlSAX.pm をみると、ParserがnewされるところでErrorHandlerに自分で作ったもの(例えばMyErrorHandler等)を指定すればよさそうなのですが、具体的になんという名前の関数を用意し、どのタイミングで呼び出されるかなど、よくわかりませんした。 すみませんが、どなたかお分かりでしたらアドバイスをください。
471 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 18:14:52 ] 使ったことないので分からんけど ErrorHandlerに無名サブルーチンを渡しておけばパースに失敗したときにコールバックしてくれるんじゃないの?
472 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 18:37:28 ] >>470 俺も使ったことないけど、フツーに考えて $parser->{ErrorHandler}で例外をキャッチできるってことなんじゃなないの?
473 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 18:59:18 ] >>466 さん&>>468 さん> dクスです!参考にして少し書き換えました! #!/usr/local/bin/perl -w require 'jcode.pl'; print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n"; while (<>){ if (/[1-3]$/) {chop;$kyara=chop;last;} }; if($kyara==1){print"あなたはお昼寝好きのこねこを選びました☆"} elsif($kyara==2){print"あなたはお人好しのゴーレムを選びました☆"} elsif($kyara==3){print"あなたは強気なドラゴンを選びました☆"}; while (<>){}; こんな感じに☆ >>464 さん> 必要になってからがんがります☆(コラ
474 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:00:38 ] あ、よく見たら、ドラゴンとこねこが逆(汗
475 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:10:56 ] キメラは?キメラはいないの?
476 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:14:49 ] 1しか押さないだろこれは・・・
477 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:27:33 ] >>475 が「イサキは?」に見えた。 配列や printf を覚えて欲しくなるけど、楽しみながらコツコツやってそうでいいな。
478 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:38:06 ] >>475 ああ、大きなキメラが入るよ。 今年一番の大幅改良だ。
479 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 21:43:44 ] たった今Perlにprintfやsprintfがあることを知った。 俺は車輪を10も20も発明していたらしい。すばらしい!
480 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 23:31:32 ] むしろ、どういうルートで習得していけば そいつらと鉢合わせずに済むか、を考えるのが難しいかも。
481 名前:473 mailto:sage [2007/05/07(月) 23:32:46 ] 質問してもいいでしょうか。。 print system("cls"); と書くと、PCではちゃんと画面クリアしてくれるんですが、サーバにアップしたら画面クリアしてくれませんでした。 ブラウザの画面をクリアする方法って無いんでしょうか・・? あと、サーバにアップしたら、 while (<>){ if (/[1-3]$/) {chop;$kyara=chop;last;} }; という部分も全て無視されました。 たぶん、while(<>)の部分がサーバでは無視されてしまってるんだと思うんですが、 どうすれば良いですか? HTMLでフォームを表示させてそこから入力させるしか無いのでしょうか?
482 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 00:03:55 ] clsはWinのコマンドだし (一応リンクは張ってはあるらしいが・・・)、 そもそも 「コンソールとブラウザの挙動を勉強してください」 としかいえない ブラウザに対して print ""; でえぇんとちゃうのんかと STDIN になんもデータ無いからあたりまえです
483 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 01:16:20 ] これはどう見ても新手の荒らし
484 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 02:59:42 ] >>481 荒らし以前に板違い。>>1 嫁
485 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 05:32:43 ] すみません。 CGI以外の純粋なperlのみって書いてありますね。 気をつけます。 >>482 なんとなく理解しました。 clsをclearとしても無理だったので普通にフォームからの入力にします。 ご迷惑かけてすみませんでしたm(__)m
486 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 09:09:04 ] >>478 「大幅改良っ!!キメラぁぁ!!おにいちゃんかっこいいいいぃぃぃい ぃくううううう!」
487 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 14:52:59 ] >>481 JavaScript 埋め込んでクリアすれば良いんじゃない?
488 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 13:07:53 ] すみません、 ・ローカル変数の一覧を取得する方法 ・ハッシュの内容をローカル変数に一括して設定する機能(PHPのextract()関数に相当する機能) があれば教えてください。
489 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 13:32:01 ] >>488 use Dumpvalue とか。 hashの展開はこんなんでいけるだろ。 while (($key, $value) = each %hash) { eval("\$$key = \$value"); } ただし任意のキーが使われる場合はexploitになるんで別の方法で。
490 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 13:56:22 ] デバッガでも作ろうというのでなければハッシュのまま使ったほうが いいと思うよ。たぶんろくなことにならない。
491 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 14:20:02 ] cpanなしでHTML::Entitiesをインストールする方法を教えていただけませんか。 「Perl "HTML::Entities" インストール」でぐぐってもヒットせず困ってます。
492 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 14:58:35 ] >>491 OSは?
493 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 15:06:48 ] ActivePerl(Win)だと初めから入ってるし、Unix系で「CPANなしで」ってのも ピンと来ないし何だろう。「レン鯖で使いたい」なのかな。
494 名前:491 mailto:sage [2007/05/10(木) 15:50:52 ] >>492 Linuxです。Perl5.8。 >>493 その通り、海外のレンタルサーバーです。 ただ今はロ−カルのMacでやってるんで、CPANにトライしてみたんですが、最初にいろいろ英語できいてきて、適当に答えてたら設定がおかしくなったのか、 cpan install HTML::Entities がfetchできないとかでインストールできませんでした。 CPANむずい・・・
495 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 16:01:10 ] >>494 要するに、ロ−カルのMacにインストールできずに > CPANむずい・・・ と言ってるわけだ。 こんなこと言っている人がCPANなしでレンタルサーバにインストール しようってわけね。考えるだけ時間の無駄というものでしょう。
496 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 16:04:37 ] >>491 READMEに書いてあるじゃん
497 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 16:18:17 ] HTML-Parser-*.tar.gz ひろってきて展開して perl Makefile.PL && make && make install だけどcpanの英語がわからんとか言ってるレベルじゃもっと無理じゃね?
498 名前:491 mailto:sage [2007/05/10(木) 18:34:51 ] >>497 HTML::EntitiesはHTML::Parserの一部ということでしょうか。 試しにHTML::Parserをインストールしてみると・・・たしかにHTML::Entitiesも印ストールされました。 貴重なヒントをありがとうございました。 #こんな情報どこにあるんですか。www.xav.com/perl/site/lib/HTML/Entities.html とか見ても書いてないし。 ちなみにHTML::ParserはMacPortsをつかって sudo port install p5-html-parser でいけました。CPANは難しくて分からなかった人でもMacPortsなら楽勝!MacPorts万歳!
499 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 18:37:45 ] そ、それはよかった
500 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 19:02:37 ] >>498 search.cpan.org/dist/HTML-Parser/lib/HTML/Entities.pm
501 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 19:08:36 ] >>498 search.cpan.org/ をブックマークしておくといいね。
502 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 19:08:43 ] >>498 cpanモジュールなんだからcpanで調べろよ。 search.cpan.orgでHTML::Entitiesをサーチすれば一番上に出てくる ttp://search.cpan.org/~gaas/HTML-Parser-3.56/lib/HTML/Entities.pm を見れば一発でわかるだろ。
503 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 22:17:13 ] Tkを使用して、GUIアプリを作成しています。 大きく二つのフレームから構成しています。 1.左フレーム 2.右フレーム この二つのフレームにそれぞれScrollbarを設けたいのですが、 Frameウィジェットには何故か-yscrollbarオプション等が無く Scrollbarウィジェットを動作させることができません。 Scrolledで強引に取り付けると、レイアウトがおかしくなります。 どうおかしくなるかというと、 1.Frame内部のウィジェットの配置が決まらない (HTMLでいう、alignやvalignが効かない) 2.そもそも、実行時にワーニングのような表示が出る(実行はできる) 1.に関しては、スクロールバーを外せば正常に(期待通りに)配置されます。 Tkを使用される方は、こういうフレーム分けしたレイアウトで、 かつ各フレームにスクロールバーを表示させたい場合、どのような ウィジェットの使い方をされるのか、教えていただけないでしょうか。