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 あたり
610 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 01:22:26 ] >>585 現象は添付ファイルの種類を問わず発生しますか? 複数のファイルを用意し、それぞれを添付したメールを用意して試してみましょう。 添付ファイルのファイル名に日本語が含まれているか否かで変化があるか確認してください。
611 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 01:26:40 ] >>607 本当に? 間違いない? 信じて大丈夫? いや、誰も信じないからいいんだけどさ。
612 名前:585 mailto:sage [2008/09/05(金) 01:32:48 ] >>610 添付ファイルの種類を問わず発生しているように見えます。試しているファイルはすべて英語名です。 binmode FILE することで、JPG は開くことができるようにはなりました。 PDF = ファイルが壊れている、と出て開けない。 JPG = 画像の下の方がブロックノイズ(最後までデータができていないっぽい) HTM = ファイルの最後の方で途切れてしまう。 TXT = ファイル末尾に謎の文字化け。(=ェ攵モ]モスクラmエ輜オラ ←こんなのが。なんだこりゃ。) message_to_file で書き出してみたファイルを見る限りでは、途中でデータの転送が止まっているようなこともなく、 正常に処理できているように見えます。parse_data して、print する途中でどこか変なところがあるのでしょうか。
613 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 04:05:43 ] xorってよくわからないな。
614 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 04:14:30 ] ヘルプに誤字発見。これってどこに通報すればいいの? Parentheses missing around "my" list at 1.pl line 27 (#1) (W parenthesis) You said something like my $foo, $bar = @_; when you meant my ($foo, $bar) = @_; Remember that "my", "our", "local" and "state" bind tighter than comma.
615 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 04:42:13 ] stateって結構便利だと思うんだけど、 これってバリバリつかっていいの? gotoみたいに、「絶対に使うな!」とかって怒られない?
616 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 07:46:59 ] perlのゲーム作りたいなー 誰か一緒に作らない?
617 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 07:54:21 ] >615 ちゃんとメリットとデメリットを理解して、それが適切だと思えば 別に何を使って良いんでねーの? stateを使うならオブジェクト指向にしてもいいかなあと思ってみたが、 これは単に自分が無知なだけか。 >616 ゲ製板池
618 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 08:21:12 ] www.geocities.jp/ky_webid/perl5/index.html このページすごいわかりやすいね
619 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 10:55:16 ] >>609 Webprog 板に行ってきますヽ(´Д`;)ノ
620 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 12:06:49 ] >>618 宣伝厨うざい、マルチウザイ >print "$str"; # ***123***\n を出力 こんな事書くアホなページの宣伝すんな 「参考書籍」でPBPやらEffectiveやら勧めてるが 読んでないのバレバレじゃねえか
621 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 12:17:37 ] そこまで過剰に反応する意味がわからない。
622 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 12:34:15 ] >>621 > そこまで過剰に反応する意味がわからない。 ウソが広まるのを放置しておくと何年もすべての人が被害を被り続けるからでしょう
623 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 13:45:58 ] まぁ実際、とほほとKENTで広まりまくってるけどな
624 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 15:19:06 ] だからこそ過剰に反応するんだろうな
625 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 16:09:32 ] これだから原理主義者は困る
626 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 16:13:05 ] オライリーの「プログラミングPerl」 って、読んだけど、よくわからないね、難しくて。 これって中級者以上向けだよね。
627 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 16:18:27 ] >626 ラクダの前にリャマがいるだろ
628 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 16:29:40 ] 「はじめてのPerl」ね。 うん、そっちから読んだ方がいいみたいだね。
629 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 16:30:31 ] Perlでソースコード書いて、 それをCのコードに変換するのってできるの?
630 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 16:42:34 ] Cで書けばいいんじゃね?
631 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 16:50:01 ] >>629 つB::C でもperlらしいperlプログラムはたいていCにしても速くなんないから やめとけ。
632 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 20:15:47 ] 「続・はじめてのPerl」読んでみたけど、わからんね。 理解できるページが3ページくらいしかない。
633 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 20:16:52 ] >>631 速度を速くしたいんでなくて、 あの難しいCのプログラムを自分の手で 生成できるというのがしびれるんです。 昔C勉強したけど結局理解できなかったし。 そんで、B::Cで検索しても情報がでてこないんで、 使い方を解説してあるページを教えてもらえますか?
634 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 20:26:11 ] CもPerlも難易度なんて変わらんと思うけどな。 むしろPerlの方が覚えること多い印象だが。
635 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 20:30:20 ] >>633 ttp://search.cpan.org/~nwclark/perl-5.8.8/ext/B/B/C.pm
636 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 20:48:28 ] >>635 よんだけどわからないよどうしよう 日本語で詳しく説明書があるサイトをおしえてください
637 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 20:54:13 ] Can't locate B/C.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at 6.pl line 1. BEGIN failed--compilation aborted at 6.pl line 1. とでてくるのですが、ひょっとして 自分のパソコンにはB::Cが入っていない? これってPPMで入れるの?
638 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 20:55:27 ] >>636 それを読み解く気合がないなら、その類のモジュールは楽しめない。
639 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:00:52 ] >>637 そこから手取り足取り教えにゃわからん奴がちょっかい出すブツじゃないよ。
640 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:05:05 ] いやまじでボクのパソコンにはB::Cが入ってないような気がします。 これはどうやったら確定できますか? それでPPMみたんですけど、そこにもB::Cが登録されてないんです。
641 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:15:19 ] しんごけ
642 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:15:40 ] 5.10だと、perlccやらB::Cやらはごっそり標準配布から無くなってるが もしかして5.10? perldelta参照してみそ …つーか深追いすんな、しても無意味だ。 ちょっとした想定外のモジュールをuseしてるだけで、B::Cは通らない んだから(実用的じゃ全くない)。
643 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:16:35 ] >>640 釣りだといってくれ
644 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:32:53 ] いつもの独り言の人はもしかしなくても 5.10 だよ。
645 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 21:36:27 ] ああ、いつもの人か。レスすんじゃなかった orz...
646 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 22:14:45 ] trends.google.com/trends?q=CPAN&ctab=427256520&geo=all&geor=all&date=all CPANやべええ どっかの株価1円企業みたいだ
647 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 22:27:30 ] Perlってスレッドプログラミングとかってできないの? Aというスレッドと Bというスレッドがあって、 AとBを同時に走らせるみたいな。
648 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 22:30:35 ] >>646 今時わかってる連中が CPAN に用がある時は Google なんぞ通さずに CPAN Search をひっぱたくからな。
649 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 22:37:33 ] >>646 日本一位なのか
650 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 22:47:10 ] >>647 >>223
651 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 00:06:09 ] >648 あ、CPAN自体に辿り付くのにgoogle使う……
652 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 00:30:52 ] ブックマークから自分のアカウントを開く
653 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 00:33:42 ] Firefox の smart keyword に登録してる。
654 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 00:36:26 ] search.cpan.org と毎回入力してる。ブックマークしろよと打つたびに思う。
655 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 09:30:16 ] アロー演算子を使う局面や場面は、 どういうときと、どういうときと、どういうときがあるの? 自分が知ってるのは、 「リファレンス経由で配列要素にアクセスする」 っていう場合だけど、そのほかにも、 オブジェクト指向のときもアロー演算子を使うの?
656 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:36:40 ] ●配列に限らない ●Perlにおいてオブジェクト指向はリファレンスを利用 なので、>655の質問は少しだけ着目点がズレてる。
657 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:53:06 ] www.rwds.net/kuroita/program/Perl_oo.html#package パッケージの説明として、これはわかりやすい。
658 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:55:41 ] package main; use Stone; my $obj = Stone->new('石灰岩','100'); ----------------------- ↑たとえばこれ。 これってオブジェクト指向だからアロー演算子を 使ってるという理解でいいよね?
659 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:01:38 ] それでhelpのタイポを見つけたら どこに通報すればいいの?
660 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:11:19 ] print "a"; die; ------------------ ↑このコードだと、 Died at 6.pl line 3. a という出力になるのに、 ------------------- print "a\n"; die; ------------------- ↑このコードだと a Died at 6.pl line 3. という出力になる。つまりひっくりかえってるんだが、 なんで?
661 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:18:48 ] 気分がいいのでレスしちゃう。 >658 それはそうとして>656は無視かい? >659 ココロの110番に >660 flush
662 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:19:55 ] C言語とPerlは近い部分があると聞いたのですけど、ほんとでしょうか。 それを聞いてPerlも勉強してみたいと思ったので。 printf が print だったり、微妙に違うようですが。 難しいのかな。
663 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:22:52 ] perlは超カンタンです。 なにしろ俺サマでさえ、一ヶ月もあれば 基本は理解できます。
664 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:23:51 ] サブルーチン呼び出すときに、 aaa; だとウオーニングが出るんだが、 aaa(); だとウオーニングがでない。つまり、 サブルーチンを呼び出すときは必ず aaa();と、パーレンをつけなければいけない、というルールなの?
665 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:25:03 ] >>662 C言語をマスターしているのなら、普通の頭脳の持ち主なら、1週間で完全に 習得できます。
666 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:25:38 ] 自己解決した。 サブルーチンの定義が、 ソースコードの最初のほうに書いてあれば ()をつけなくてもできるということか。 だったら、サブルーチンの定義は ソースコードの後ろでなくて、 最初のほうに書いたほうがいいんでないの?
667 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:29:43 ] >662 printfもある。 >666 お好きなように。 俺はCで言うところのプロトタイプ宣言だけしてるけど。
668 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 12:42:31 ] unlinkって自分は消せないのね。
669 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 12:45:37 ] 日本語のファイル名ってunlinkで削除できないの? 「あ.txt」とか。
670 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 12:54:58 ] SND_ASYNCのフラグの書き方と指定の仕方がわからない。 homepage3.nifty.com/hippo2000/perltips/sound.htm#item_SND_ASYNC
671 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 12:55:45 ] Win32::Sound::Play(SOUND, [FLAGS]) この例を見て、 Win32::Sound::Play("file.wav",[SND_ASYNC]); と書いたが、なんか違うようだ。
672 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 13:23:23 ] perl2exe おもしろ
673 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 21:43:36 ] >671 なんでリストにしてんの?
674 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 21:56:11 ] >>673 書き方間違ってる? 書き方のサンプルがないから 正直、よくわからんかった。
675 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 21:57:28 ] use feature qw( :5.10 ); system q|cls|; sub abc{ state $a=10; say $a; $a--; if ($a>=5) { abc(); } } abc; ------------------------------ サブルーチンの再帰呼び出しで、 サブルーチン内部の定義部分で、 自分自身を呼び出すときには、 ()パーレンの記述は必須なんだね。 これを省略しようと少し考えたけど 無理っぽい。
676 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 21:59:11 ] &アンパサンドをつけてサブルーチンを呼び出すのは 古いやり方なので極力さけましょう、とか書いてあるので &をはずして呼び出そうとするんだけど、そしたら今度は ()パーレンの記述が必須になってしまう。()パーレンのほうが 100倍メンドイと思うんだけど。 、、と思うなら、ソースコードの最初のほうに サブルーチンの定義を書けばいいじゃん、と思ったけど 通常の関数ならそれでいいけど、再帰の場合はやっぱり無理なのね。
677 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 22:01:10 ] stateとmyって実質同じだよね。 どっちも変数をプライベート化して、 どっちも歴史狩る変数っていう。 ただ、stateの方は一回だけ実行されるという 違いがあるけど。 それで、すべてのmyをstateに変更しようかなと おもうんだけど 、stateにすると何か問題ある?
678 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 22:01:58 ] ちなみに歴史狩る変数っていうのは、 過去の歴史あるソースコードを無効にする って意味です。
679 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 22:10:44 ] open( FD, "| C:\\WINNT\/NOTEPAD.exe"); ↑これでメモ帳を開くのと、 system関数でメモ帳を開くのと、 何か違いはありますか? 見た目は同じように見えるんですが。
680 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 22:31:45 ] >674 一般的に、[ ] は省略可能な要素を意味する記号。
681 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 22:35:24 ] >>667 効果が全く違うぞw
682 名前:681 mailto:sage [2008/09/06(土) 22:36:20 ] >>681 はアンカーミス。>>677 への突っ込み。
683 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 22:42:21 ] >675 サブルーチンの宣言と定義を切り離せばいける。面倒だけど。 use feature qw/:5.10/; sub abc; # 宣言だけして… sub abc { # こっちで定義 state $x = 10; say $x--; if ($x >= 5) { abc; } } abc;
684 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 22:52:15 ] >>683 あー 内容が書いてなくても 宣言だけ先にしてあれば ()パーレン無しでもいけるんだー
685 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 22:53:43 ] >683 Cとかに慣れるとそんなに面倒でもないけどねー。 さくっとコメントでサブルーチンの説明するときとか、長くなるんで先頭に並べちゃってる。 >676 省略はPerlの美学なので、 出来る限りタイプを少なくするという思想は正しい。 だけど、わざと面倒な書き方をしておいて、 かつ、そこから外れた書き方をしたらエラーが出るようにしておく、という思想もある。 もしミスった時に、こっちの方が分かりやすいからだ。 この2つはどっちも正しい。 どっちを採用するかは自分で決めるしかない。 仕事でやっているならば、諸乳母で指定される場合があるのでそれに従おう。
686 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 22:55:54 ] 諸乳母ってなんだ、職場。
687 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 04:25:30 ] 質問です。 先日MacPortsで自動アップデートを実行してから下記のエラーがperl実行時に出てくるようになりました(その前までは出なかったのに…) Use of uninitialized value in concatenation (.) or string at /opt/local/lib/perl5/5.8.8/darwin-2level/Scalar/Util.pm line 30, <> line 6. CPANの自動アップデートも行ったのですが、同じエラーが出続けてしまいます。 プログラム事態は特に問題なく実行できているのですが、これを解決するにはどうしたら良いのでしょうか。 よろしくお願いいたします。 MacOSX 10.5.4 MacPorts 1.600 Perl 5.8.8
688 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 05:22:27 ] >>687 no warnings;
689 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 06:24:49 ] no warnings野郎がキチガイだから無視しないとだめ。 で、回答だが、変数を初期化しないのが理由でウオーニングが出ているのだから、 $aとかの変数をすべて、my $aとかで初期化すれば解決する。 それはUtil.pmの30行目と 本体の6行目にある。
690 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 06:25:56 ] ところでみんなこのシリーズみてる? perl tutorial jp.youtube.com/profile_videos?user=bermnz&p=v
691 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 06:39:15 ] >>688 Scalar::Utilの30行目の警告という事は分かってるんです。消し方も。 ただ気持ち悪いじゃないですか。 CPANで最新のソースを調べても特に修正は無いし、 実際のソースを見てもどうしてそうなるのか分からないんですよね。 search.cpan.org/src/GBARR/Scalar-List-Utils-1.19/lib/Scalar/Util.pm -------------------------------------------- if (grep { /^(dualvar|set_prototype)$/ } @_ ) { require Carp; Carp::croak("$1 is only avaliable with the XS version"); #エラーにある30行目はここ } -------------------------------------------- $1ってのに値が入ってないとかそういう意味だと思うのですが、 値が入らないのであれば、この29~30行目は実行されないはずではないのでしょうか…。 初心者なりに色々考えてるのですが全く分からない…。
692 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 06:45:48 ] >>689 no worningsはやっぱりダメですよね! どの本見ても書いてあったので、必ず入れてます。 本体の6行目というのは、Util.pmを直接の 本体という意味でしょうか?(どいつが本体かわかん無い…) Util.pmを直接自分の書いたスクリプトは実行していなく、 自分の書いたスクリプトの6行目は use Encode; なので、なんも問題が無いと思うのですが。 すみません、ご教授下さい。
693 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 07:05:38 ] ここで空気を読まずに別の質問 Perlもサイドエフェクトってあるの?
694 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 08:10:35 ] >>691 grepを一旦、@aで受けるとかどう? if (my @a = grep { /^(dualvar|set_prototype)$/ } @_ ) { require Carp; Carp::croak("@a is only avaliable with the XS version"); #エラーにある30行目はここ }
695 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 11:51:40 ] >>691 こんな感じの事が起きている。 $_ = q/abcd/; { m/^(abcd)$/; print "a:$1\n"; } print "b:$1\n"; しかし、grep BLOCK LIST の代わりに grep EXPR,LIST を使っても同じ結果になるので要注意。 理由は未確認。(内部的に BLOCK になっているのだろう) このエラーが放置されている理由は、おそらくこのエラーが報告されていないから。 なにしろ、これはXSバージョンが使えない場合かつユーザーが(デフォルトで輸出されない)特定の 処理を要求した場合のみに発生するエラーだから。 今までエラーが出なかかったのは、単にXSバージョンが使われていたからだろう。 で >>687 にあるようにプログラムの動作に問題が無いならば、dualvarまたは(/かつ)set_prototype を必要無いのに要求していたという事なので、単にこれらを要求する事を止めればよい。
696 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 12:33:07 ] >>695 $数字はダイナミックスコープだからブロックを抜けたら元に戻るというのは その通りだが、今回の例は抜けてないので違うんじゃない?
697 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:38:34 ] コマンドラインで引数を与える時に、間違った変数名で入力した場合に Usageを出したいのですが、どうすればいいでしょうか?
698 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:40:28 ] 正規表現で判定するか、CPANからモジュール引っこ抜いてきて判定する 後はprintでusage出せばおk
699 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:43:47 ] その正規表現の方法がわからないのです。 C:xxx.pl -aaa=1を間違って C:xxx.pl -aa=1と入力なのですが・・・・ 中で変数を宣言してなくて、外でしているのですが、変数名を見ることができるのですか?
700 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:46:07 ] 何を言っているのか意味不明
701 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:51:00 ] C:xxx.pl -aaa=1を間違って C:xxx.pl -aa=1入力した場合エラーをだしたい -aaa=1 が正しく -aa=1 が間違い プラグラム中には our $aaa は宣言してますが our $aa は宣言していません なのですが 説明下手ですいません
702 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 16:13:28 ] ああ、そうか。 引数で -aaa って言ったら、普通は a が3つって解釈すると思う。 んで、素直に if 文じゃダメ?
703 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 16:14:21 ] >>694-696 XSや、エラーを出す原因となっているスクリプト部分や、 dualvar、set_prototypeなど何だか分からない言葉が 大量に出てきたので、勉強して出直してきますw 自分の書いたプログラム以外の物を編集するのは 気が引けるので、環境を整える方向で考えてみます。 ありがとうございました。
704 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 16:17:05 ] >>701 必要な変数に値が与えられたかどうかを判別するので対処出来るのでは? 与えられた引数全てを見れるような方法が欲しいってこと?
705 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 16:54:19 ] >>697 > コマンドラインで引数を与える時に、間違った変数名で入力した場合に > Usageを出したいのですが、どうすればいいでしょうか? ?を使えばいい。
706 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 17:12:25 ] 引数のオプション名を変数名に紐付けるのではなく、 ハッシュキーに紐付けることで少し楽になる。 あとは Hash::Util を使ってロックした上でエラートラップするなり、 keys %hash リストの各要素と順次 eq するなり。
707 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 17:23:51 ] >>699 なんでそんな入り組んだややこしい遠回りで手の込んだことをしたいの? ふつうにGetopt::Longで処理するのではだめなのか?
708 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 17:27:42 ] 宣言されている変数に値を代入したいという意味なら、こうするのはどうだろうか? # 宣言時にとりあえず空文字をいれておく our $aaa = ""; our $bbb = ""; for (@ARGV) { defined ${$1} and ${$1} = $2 if( /-(.+)=(.+)/ ) }
709 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 19:18:10 ] >>696 今回は grep BLOCK LIST なので、マッチ演算が行われた(目に見える)ブロックから抜けている罠。 695をブロックで書いたのは $数字 のスコープから抜けている点がブロックと同じだからなんだけど、 組み込みのgrep関数のソース(pp.c 内の pp_grepstart)を見たら中でENTER を行っていた(==grepの 中にブロックに入る/抜ける時と類似の処理が含まれていた)ので、ブロックでも構わなくね? そうでなくても組み込み関数のオーバーライドがありうるので、関数はブロック(サブルーチン)のよう に扱う方が無難だと思うのだが、Scalar::Util の作者はそう考えなかったみたい。
710 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 19:50:06 ] >>709 grepのあとがブロックになってるのを見落としていた。スマン。 で、これどうみてもScalar::Utilのバグじゃね?