1 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 19:10:40 ] "The duct tape of the Internet" こと、Perlについての質問箱です。 "There's more than one way to do it" ということで、 Perlの奥深さについて皆で語り合い、追求してまいりましょう。 CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 ( WEBプログラミング板 pc11.2ch.net/php/ ) CGIの質問は答えが Perlと全然関係ない話に帰着する場合が 多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 www.perl.org/get.html ● 2008/08/11 現在の最新版(安定版): 5.10.0 ● 2008/08/11 現在の開発版: 5.9.5 ▼ 前スレ Perlについての質問箱 36箱目 pc11.2ch.net/test/read.cgi/tech/1215569470/ リンク集は>>2-3 Perl 日本語処理の基礎の基礎 >>4 過去スレは>>5-6 あたり
496 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 05:21:19 ] >495 結論が出てるのに何が疑問なのかが分からない。 それと多分、誠意が足りてない。
497 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 08:07:27 ] >>496 を読んだ >>494 「なんだよ、あってるならあってるってとっとと言えばいいのに」 「誠意とか意味わかんないし関係ないじゃん」 「まあいいや。誰かも煽りはスルーって言ってたし。バカには言わせとけばいいんだ」
498 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 11:41:23 ] 質問です。 my @aaa = ("A" , "B" , "C" , "D"); foreach(@aaa){ @aaaの中を一つ飛ばす。 printf("%s\n",$_); } とし、結果を B D としたいのですが、どのようにしたら簡単に出来ますでしょうか。 for()で$iを途中インクリする方法を考えたけど、いまいち複雑になったので。
499 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 11:58:28 ] next;
500 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 12:05:45 ] splice
501 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 12:06:44 ] my @aaa = qw(A B C D); for my $i (0 .. $#aaa) { next if $i % 2 == 0; print $aaa[$i], "\n"; }
502 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 12:10:17 ] ヒアドキュメント内でループ処理したいのですが コンボボックスをループで動的に生成したいのです。 どうやってやればいいのですか
503 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 12:21:31 ] >>502 @{[ 任意の式 ]} を埋め込めばいいだろ。式としてdo BLOCKをつかえばおよそ何でも書ける。 Template Toolkitとか使った方が幸せになれそうだけどな。
504 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 12:29:08 ] mapでおk
505 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 14:53:09 ] リャマ本の133ページ(手元にあるのは11版です)の「8.5.1 優先順位の例」にある このパターンは、文字列先頭にあるfredにマッチするか、あるいは末尾にあるbarにマッチします の部分ですけれど、これって このパターンは、文字列先頭にあるfredにマッチするか、あるいは末尾にあるbarneyにマッチします の誤りじゃないんですか?オライリーのエラッタには載ってないみたいなんですが。
506 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 14:54:56 ] 途中で送信してしまった… /^fred|barney$/ だとそうなるような気がするんスが。
507 名前:498 mailto:sage [2008/09/02(火) 14:54:57 ] >>499-501 サンクス。 確認できますた。
508 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 15:03:51 ] >>505 最初/^foo|bar$/ってなってたのを書き直したんだろうなw
509 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 16:05:42 ] >508 なんだか急に親近感がwww
510 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 17:04:03 ] そして11版まで行って誰も指摘してないのかよこれww
511 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 17:32:56 ] 指摘しちゃだめだろjk
512 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 18:13:41 ] Perlを勉強する分には、Win上でActive Perlを使うのでも支障は無いでしょうか? UNIX上とはかなり差があるような気がして…
513 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 18:17:08 ] Perl自体にWindowsもUNIXも組み込みも関係ない
514 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 20:11:06 ] >>512 コマンドプロンプトの操作性やパスの設定、文字コードを考えると、 Unix系のOSでperl使った方がましだと思う。 Cygwinでもいいんだけどさ。
515 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 20:33:34 ] >>512 perlを1ヶ月学んできづいたことは、 CPANからモジュールとってくる、ってときに、 WinのActivePerlだと、PPMっていうソフトで 新しいモジュールをインストールするんだけど、 そこのPPMのメニューにすでに登録されている モジュールしかインストールできない。 厳密に言えば6段階くらい複雑な手順をふめば PPMを使わないで手動でインストールできるらしいんだが 初心者にはおすすめできない。 つまり、CPANから○○をダウンロードして使え、だとか 言われたりしたときとか、あるいは自分でグーグルで検索して よさそうなモジュールみつけたときでも、それをかんたんには 入れられないケースが発生することがある。 自分がはまってるのは、mp3を鳴らすなんとか、ってモジュールを 入れたいんだが、PPMにのってないので困っている。
516 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 20:35:12 ] 2番目は、文字コードの問題。 DOSプロンプトで勉強するときに、必ず use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; # ※1 use Encode; と書かないといけない。
517 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 21:08:44 ] >>512 coLinux+debian sidオススメ。 無駄にハイクオリティーなことをすると楽しい。
518 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 21:46:20 ] $file = 'C:/なんたら/かんたら.txt'; open my $fh, '<', encode("cp932", $file) or die $! ; # ※2 print <$fh>; # 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう # おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。 # 【注】※1.の行を入れると、DOS窓への日本語出力は簡便になりますが、 # ソースファイル名に非ANSI文字が含まれる場合にdie 文の出力が失敗します。 # ※2.OSに渡す文字列(ファイル名,dosコマンドのオプションなど)は、 # この例のようにcp932でエンコードする必要があります。 ----------------------------------------------------- ↑これの説明がよくわからないんだが、ファイル名が日本語の場合、 上記の措置が必要という意味なの? それとも、ファイル名がアルファベットでも、 そのファイルの中味に日本語が書いてあったら、 上記の措置が必要という意味なの? で、あれば、ファイル名が英語で、なおかつ ファイルの中味が全部英語なら、上記の措置は 必要ないってことなの?
519 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 21:55:57 ] どっちが主流ですか? 1. $obj = new X; 2. $obj = X->new; 1. call_sub(); 2. &call_sub;
520 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 22:02:39 ] $file = 'C:/なんたら/かんたら.txt'; open my $fh, '<', encode("cp932", $file) or die $! ; # ※2 print <$fh>; ------------------------- ↑これってmy $fhって、なんなの? ファイルハンドルなの?
521 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 22:09:10 ] open(IN, "1.txt"); while (<IN>) { print; } close(IN); ------------------- 別に、>>4 に書いてあるようにcp932ってしなくても、 上記で日本語を含むファイルを開けるのですが、 これでいいの?
522 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 23:30:15 ] >>515 こんなんもあるYO Strawberry Perl www.moongift.jp/2008/06/strawberry_perl/
523 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 23:37:16 ] 別ファイルに変数を渡す問題だが、 サブルーチン渡しにしたら問題が解決したと書いたが、 参考書で調べたところ、 「サブルーチンは宣言すると、すべて自動的にグローバルになる」 と書いてある。 つまり、ourでグローバル渡しをしているのと 実質的にまったく同じことなので、意味がないのだ。 ここはやはり、モジュールとかパッケージの勉強を するべきなのか? 本当はどうやって渡すの?
524 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 01:37:40 ] use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; # ※1 use Encode;
525 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 01:38:28 ] $file = 'C:/なんたら/かんたら.txt'; open my $fh, '<', encode("cp932", $file) or die $! ; # ※2 print <$fh>;
526 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 01:39:15 ] >>524 をファイルの先頭に書けば、 >>525 は必要ないの? 実際、>>524 だけで、 >>525 なしでも、動いたんだけど。
527 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 01:46:07 ] 何もせずにそのままコピーするだけならエンコーディング無視のバイト列で 扱ってもいいけど、普通は中身みて加工とか集計とかするわけで、そういう ときに違いが出るんだな。
528 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 02:10:24 ] $fhってのはファイルハンドルなの? 普通は出てくるはずの <IN>とかの文字が見えないので不安なんですけど。
529 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 02:13:03 ] 他ファイルのmy化された変数を別ファイルで読み込んで 使うのって、結局ourでグローバル変数化しておくか、あるいは サブルーチンに入れて、return渡しするしかないの? サブルーチンにいれるのは、すべてのサブルーチンは 宣言すると自動的にグローバル化されるのだから、 他ファイルに渡せるのはあたりまえなんですよね。 結局ourでグローバル化してるのと本質的には同じだし。 パッケージとモジュールの勉強をしてみましたが、 それでも結局グローバル化されてる変数は読み込めましたが、 my化されてる変数は読み込めませんでした。
530 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 02:46:49 ] 自分で何回もためしてみたけど、やっぱりモジュールファイルの中で my化してるとだめなんだ〜 他ファイルで使って欲しい変数はグローバル化してないと だめなんだね。
531 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 02:48:43 ] >529 相変わらず質問の意図が分かりかねるのだが、それはさておき。 >他ファイルのmy化された変数を別ファイルで読み込んで >使うのって、結局ourでグローバル変数化しておくか、あるいは >サブルーチンに入れて、return渡しするしかないの? やり方が分かってるなら、そうすればいい。 >それでも結局グローバル化されてる変数は読み込めましたが、 >my化されてる変数は読み込めませんでした。 myで宣言されてる変数が他から読めたら、myの意味が無いっしょ。 例えばグローバル変数にはメリットとデメリットがある。 特に理由が無ければデメリットの少ないローカルな変数を使って、サブルーチン間を渡せばいい。 ただし、メリットとデメリットを理解している人間が、的確な場所に使う分には何も問題がない。 グローバル変数を使うのも使わないのも、両方とも正解だ。 その「的確な場所」が分からないのなら、まだ使うべきではないということだ。
532 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 02:50:26 ] Wikipediaの「名前空間」の項目が、少しは疑問を解決してくれるかも。 ja.wikipedia.org/wiki/%E5%90%8D%E5%89%8D%E7%A9%BA%E9%96%93
533 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 02:56:37 ] だーかーらー。 たとえば、モンスターの設定ファイルで、 スライムの体力=1とかって設定するとするでしょ。 ファイル名「a.pm」 package 1; my $a=1; 1; --------------- このmy $aを 他のファイルから読みたかったの。 でも無理だとわかったの。 この理解であってる?
534 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 03:03:42 ] >>533 いい加減しつこい。とりあえず以下のドキュメント読んどけ。読み終わるまで戻ってくんな。 > perlboot - Perl OO tutorial for beginners > perltoot - Perl OO tutorial, part 1 > perltooc - Perl OO tutorial, part 2 > perlbot - Perl OO tricks and examples
535 名前:533 mailto:sage [2008/09/03(水) 03:05:01 ] 読み終わりましたー
536 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 03:08:03 ] だってグローバル変数絶対使うなみたいなことよく 書いてあるじゃん。 だから絶対使ったらダメなのかと思ったし。 でも外部から読み込まれることを前提に設計されてる モジュールの場合は、外部に渡す変数はグローバル宣言なのね。 最初からそう言ってくれればいいのに。 入門書にも書いてないしー
537 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 03:50:29 ] >>536 ・Perlについてくるマニュアルに書いてある ・標準モジュールやユーティリティのソースで実例が見られる ・Webを検索すれば割とすぐに見つかる ・それについて書いてある本がいくつもある そういうアレな質問に回答を返す病的に親切な人が出てきても、 「聞きたいのはそれじゃない」だったり、完全スルーだったり。 回答者が寄り付かないように工夫しているとしか思えないです。 あなたの好みと水準にぴったり合わせた答えを提供する義務は 誰にもありません。その点は忘れないで下さい。
538 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 03:51:14 ] >>533 だーかーらーそれが勇者の設定ファイルなら読めるわ
539 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 03:59:50 ] 病的に親切な人と、叩こうとする=構おうとする人がなぁ。
540 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 04:00:02 ] >533 それであってると言う主旨の回答を3回くらい見かけてるわけだが
541 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 11:02:26 ] 下でエラーが出るのは何故ですか? --a.pl---------------- our $a = "hoge"; --------------------- --b.pl---------------- use strict; require "a.pl"; print $a; --------------------- C:\>perl b.pl hoge _____________________________________________________________________________ --a.pl---------------- our $aa = "hoge"; --------------------- --b.pl---------------- use strict; require "a.pl"; print $aa; --------------------- C:\>perl b.pl Global symbol "$aa" requires explicit package name at b.pl line 3. Execution of b.pl aborted due to compilation errors.
542 名前:デフォルトの名無しさん [2008/09/03(水) 11:02:59 ] perl -wで動かすと、 Use of implicit split to @_ is deprecated というものが表示されるのですが、これはどういう意味でしょうか? -wをつけなければ表示されません
543 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 11:14:13 ] >>542 splitをスカラーコンテキストで使うとばらした内容を@_に入れるという 仕様なんだが、サブルーチンの引数渡しに使われる@_を壊すので よろしくないということになっている。 perldiag(1)の説明によればコンパイラに負担がかかるらしい。 Use of implicit split to @_ is deprecated (D deprecated) It makes a lot of work for the compiler when you clobber a subroutine's argument list, so it's better if you assign the results of a split() explicitly to an array (or list). 古いプログラムはしょうがないが新しく書くプログラムでは避けた 方がいいと思われ。
544 名前:542 mailto:sage [2008/09/03(水) 13:01:45 ] ありがとうございます my $tab = split( /\t/, $_); こう書いているのですが、どのように修正すればいいのでしょうか?
545 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 13:07:07 ] >>544 $_ には何が入っていて、$tab には何を入れたいの? もしかして @tab と書くべきところだったってオチか?
546 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 13:33:32 ] ダミーの変数を用意して: my $tab = my @dummy = split( /\t/, $_ ); が楽だし確実だな。 でも実はタブを数えたかったのなら、タブによって分割された 項目数を数えるより直接タブを数える my $tab2 = tr/\t//; の方が効率的なのでおぼえておくといい。 ただしsplitは(第3引数に負の数を与えなければ)末尾の空フィールドは 捨てるので、この動作を利用してなんかしている場合はtrで数える手は 使えない。
547 名前:542 mailto:sage [2008/09/03(水) 14:07:31 ] >>545 ありがとうございます。 $_には、 foo\tbar\tbaz や \t のような値が入っています。 $tabには配列の数を入れたかったです。(1行目なら32行目なら0 >>546 ありがとうざいます。 頂いたとおりに修正することで、-wをつけても何も表示されなくなりました。
548 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 14:58:36 ] Perlを始めてみたのですが、 UNIXだとファイルの最初に[ #! /usr/local/bin/perl ]などとフルパスを書くと コマンドだけで実行できるようですが、Active PerlをWindowsで使ってる場合は、 こういうやり方は無理なのでしょうか? 今は、ファイルを保存したディレクトリ内で、[ perl <ファイル名.pl> ]を打ち込んで実行しています。
549 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 15:54:33 ] >>548 ちゃんとインストーラでインストールした? 解凍してコピーしただけじゃOSの設定はされないよ。 ちゃんとインストールすれば、ほげ.pl をマウスでクリックするだけで動いてくれるよ。 #! /usr/local/bin/perl が必要なのは、UNIXというOS固有の問題だから Windows には関係ない。 # で始まってるのでタダのコメント文として無視される。
550 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 15:56:48 ] ActivePerlなら、インストール時に(デフォルト設定でインストしてれば)*.plの拡張子に関連付けられてるハズだから、 .plの拡張子を持つファイルなら、コマンドプロンプトから、C:\> 〜〜.plでも実行できる。 (頭の#!〜〜はまず気にしなくてよし。#!/usr/bin/speedy とか書いてる時はエラー出るけど・・) つうか、拡張子が関連付けられてたら、エクスプローラーからダブルクリックでも実行できる。 けど、前にもココだったか、Webprog板の方だったかにいたけど、 「コマンドプロンプトが一瞬で消えてしまい、出力が読めません。」とか言わないでね。
551 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 16:20:47 ] 自分は「Perlをはじめよう」ってソフトを使ってる。 便利。
552 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 16:22:38 ] sleep 100;
553 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 16:26:34 ] 質問。 >>525 との組み合わせなのですが、 教科書や解説ページを見ると、よく open FH, ">filename.txt"; --------------- $FH = "filename.txt"; open FH; ------------------ open(FH,"<data.dat"); # 入力モードでオープン -------------------- $line = <FH>; # 1行読み込み ---------------------- open(FH, $datafile); @list = <FH>; ------------------- foreach $data_line( @list ) { print $data_line; } --------------- open(IN, $datafile); while ( $line = <IN >) { print $line; } -------------- ↑このような例がでてくるのですが、いずれもファイルハンドルとして INとかFHとか大文字がでてくるのですが、>>525 だと そのような文字が見当たりません。 できれば我々初心者が見慣れた例で書き直した サンプルをいただきたいのですが。
554 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 16:43:21 ] そういう古いのは使っちゃだめ。覚え直せ open my $fh, ">", "filename.txt"; ------------------ open my $fh, "<", "data.dat"; -------------------- $line = <$fh>; ---------------------- open my $fh, "<", $datafile; my @list = <$fh>; ------------------- foreach my $data_line (@list) { print $data_line; } --------------- opem my $in, "<", $datafile; while (my $line = <$in>) { print $line; }
555 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 16:59:55 ] >>549-550 ありがとうございました。 拡張子つけないでファイル名だけでできるかなと思ったわけです。 >>551 それインストールしてみました。イイ情報をありがとうございました。
556 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 17:05:56 ] >>553 君の大嫌いなグローバルな変数(ファイルハンドル)を使っていいのかい?
557 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 19:44:37 ] >>554 ,556 まじで? また古い本を読んでしまったのかな、、、
558 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 19:45:30 ] つまりファイルハンドルも実は変数の一つにすぎないと? それで、プライベートなファイルハンドルと、 グローバルなファイルハンドルが存在すると??
559 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 19:59:17 ] <IN>の実体は型グロブ*IN
560 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 20:31:44 ] ja.wikibooks.org/wiki/Perl/ 変数、データ構造
561 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 20:54:24 ] >556 たぶん別人。もしくは壮大な釣り
562 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 22:42:54 ] >>541 > 下でエラーが出るのは何故ですか? perldoc strict の "strict vars" の項を読んでみてください。 # そして、上の例でなぜエラーが出ないかについては: # perldoc -f sort
563 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 23:04:43 ] >>562 サンクス パッケージ名を明記しなくちゃいけないんですね。 でも、$aと$bは、自動的にパッケージ名をつけてくれると。
564 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 01:10:57 ] ファイルハンドルを変数に格納するやり方は 「間接ファイルハンドル」 という名前がついていることはつきとめました。 マッキンゼーに2,000万払って調べてもらいました。 で、古いやり方はやめて 間接ファイルハンドルを使え、と 書いてあるWEBページはどこにあるのでしょうか?
565 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 01:48:34 ] >564 ここのスレだってウェブサイトの1つってことでいいよね?
566 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 02:01:01 ] スレがやけに加速してると思ったらほとんど同一人物ぽいな。 低レベルなレスでスレ汚すなよ。中学生だろ、おまえ。 ま、おれもヒトのこと以遠が。。。でも俺よりは年下だな。 ひとつだけ教えといてやろう。 パッケージ変数はサブルーチンでアクセスしろって、PBPに書いてあった。 Class::Data::Inheritableとか使ってもいいだろう。 だから、もうこの関連で書き込みすんなよ。
567 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 02:02:32 ] あ、ちなみに俺、中学生じゃないです。その上だから。
568 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 02:04:39 ] >>565 いまボストンコンサルティングに1、500万払って 調べてももらってますが、 「古いファイルハンドルの指定の仕方(FILEとか)でなくて、 新しいやり方、間接ファイルハンドルを使え」 と明確に書いてあるWEBページは、 なかなか見つかんないですよ。 たぶんメリットがないんじゃないですか?
569 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 02:06:19 ] >>566-567 高校生でperlできるんだーすごいねー 偏差値68以上の学校?
570 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 02:09:48 ] >>568 頭が悪いのにも限度があると思うんだ。
571 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 02:13:39 ] >>569 年なんか関係ないだろ。黙って勉強しとけよ、青二才。 上では余計なこと書いた。今は反省している。
572 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 02:16:28 ] >>571 進学校?数学得意?プログラミングをはじめたのは何才から?
573 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 06:56:17 ] pc11.2ch.net/test/read.cgi/php/1218855685/981 PHPの連中は本当にキモイなぁ
574 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 08:46:42 ] perlの連中もきめえよ
575 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 08:51:19 ] 五十歩ひゃっほー
576 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 10:18:13 ] 五十歩ヒャッハァーあの村の井戸を奪えー! この場合は my $well か?
577 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 12:22:57 ] この流れワロタ
578 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 16:00:43 ] 汚物は消毒だーっ!
579 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 16:55:06 ] 任意の数の配列 @minshu 全てをチェックし、もし obutu であれば値を kasizumi にするソースコードを書け。 ただし @minshu の中に値 kenshiro があった場合は直ちに処理を中止するものとする。
580 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 17:07:21 ] 自分で書け
581 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 17:29:48 ] >579 keshizumi じゃないのか?
582 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 17:30:41 ] どこの宿題だよ
583 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 17:32:56 ] 断る
584 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 17:52:46 ] ワンライナー自重
585 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 17:56:49 ] ActivePerl 5.10 で、Gmail に Mail::IMAPClient で接続、 メールの添付ファイルを取ってくるスクリプトを書いています。 ログインしてメールの本文などを取得することはできたのですが、 MIME::Parser で parse した時点で、破損したファイル(最後までデータが出ていない)が 出力されてしまいます(output_to_core(1)を消して試してみました)。 この場合、原因として考えられるのは何でしょうか? ここで詰まってしまってます……。
586 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 19:37:19 ] どんなスクリプト書いたの?
587 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 19:49:08 ] >>586 すいません、最初から書けばよかった。ちょっとはしょってますが、こんな感じです。 use strict; use MIME::Parser; use Mail::IMAPClient; use IO::Socket::SSL; my $parser = new MIME::Parser; $parser->output_to_core(1); my $socket = IO::Socket::SSL->new( PeerAddr => 'imap.gmail.com', PeerPort => 993 ) or die "socket(): $@"; my $client = Mail::IMAPClient->new( Socket => $socket, User => 'hogehogehoogehoge@gmail.com' ) or die "new(): $@"; if ( $client->IsAuthenticated() ){ $client->select('INBOX'); my @uid = $client->unseen; foreach my $id (@uid) { my $message = $client->message_string($id) or warn "Timeout!"; my $entity = $parser->parse_data($message); my $header = $entity->head; if ( $entity->is_multipart ){ my $parts_count = $entity->parts; for (my $i = 1; $i < $parts_count; $i++) { my $part_entity = $entity->parts($i); my $filename = $part_entity->head->recommended_filename; my $filebody = $part_entity->bodyhandle->as_string; open(FILE, ">$filename"); print FILE $filebody; close(FILE); } } } }
588 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 21:11:33 ] もしかして、他ファイルに定義された変数を 別ファイルから読みたいときは、 「Perlのオブジェクト指向」 を使えばいいんじゃないかな?? あってる?ちがう?
589 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 21:59:34 ] >588 誰にレスしてるんだ?
590 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 22:07:34 ] オブジェクト指向を使えば、 他ファイルにかかれているmy化された 変数も読めるんじゃないか? と質問をしてるわけです。
591 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 22:16:38 ] 今日の発見。 use feature qw( :5.10 ); say 2 ** 50; これを実行すると 1.12589990684262e+015 とでてくるが、 use bigint; use feature qw( :5.10 ); say 2 ** 50; とすると 1125899906842624 と出てくる。 いくつの桁まで表示できるか、 今からちょっと実験してみる。
592 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 22:17:32 ] >591 質問は?
593 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 22:20:03 ] そういえば、ちょっと前のCGIゲームで、 数値の表記が、3桁づつ、、(カンマ)で 区切られて表示されないのがあって、 これを、3桁づつカンマで区切って表示するように 改造したい、と思ったんだが、これって難しいの? 例 1234567円→1、234、567円
594 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 22:24:31 ] printfって知ってるかい?
595 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 22:27:18 ] use bigint; system q|cls|; use Win32::Sound; use feature qw( :5.10 ); say 2 ** 55555; Win32::Sound::Play("file.wav"); ↑これすごいよ。 2の55555乗を計算して 画面に出力するんだけど、 DOS窓が全部数字で埋め尽くされてしまって もはや何桁あるかなんで数え切れないよ。 CPUが計算するのに5秒もかかるし。(ウチのパソコンでは)
596 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 22:35:28 ] >>593 1 while s/^([-+]?\d+)(\d\d\d)/$1,$2/;