1 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 12:22:12 ] "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/09/21 現在の最新版(安定版): 5.10.0 ● 2008/09/21 現在の開発版: 5.9.5 ▼ 前スレ Perlについての質問箱 37箱目 pc11.2ch.net/test/read.cgi/tech/1218449440/ リンク集は>>2-3 Perl 日本語処理の基礎の基礎 >>4 過去スレは>>5-6 あたり
481 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 06:42:23 ] {package Foo; sub new { bless {}; } } {package Bar; @ISA = qw(Foo);} $foo = Foo->new(); # OK $bar = Bar->new(); # OK
482 名前:480 mailto:sage [2008/11/14(金) 07:00:38 ] >>481 おおお。助かりました。thanks!
483 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 08:40:19 ] package Foo; sub new { bless {}; } package Bar; @ISA = qw(Foo); package main; $foo = Foo->new(); # OK $bar = Bar->new(); # OK じゃねえの
484 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 14:24:45 ] 夫「今日の夕飯なに?」 妻「スキヤキじゃダメなの?」 夫「・・・」
485 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 14:26:27 ] 夫「赤ちゃん産まれた?男の子?女の子?」 妻「男じゃダメなの?」 夫「・・・」
486 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:10:29 ] >>485 その流れはヤバい!w もう離婚するしかないな。
487 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 20:42:25 ] ゴメン理解できない 童貞の俺にも分かるように詳しく
488 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 20:53:25 ] 童貞じゃないけど、俺もわからん!
489 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 21:03:13 ] 女だったら、夫がロリコンでいたずらすると思ったんだろう。
490 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 21:50:28 ] な〜る
491 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 21:58:27 ] 深読みしすぎてた トン
492 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 22:46:06 ] >>489 それは俺も考えたけど、 それだとスキヤキが説明できない。
493 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 05:16:10 ] >>485 もう嫁ケンカうってるじゃんw
494 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 09:03:03 ] ツンなだけだろw
495 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 10:19:13 ] 生まれる段階に至っても性別を知らなかった夫
496 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:02:17 ] 産まれた?って訊いてる時点でダメだろ
497 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:58:51 ] 後のオブジェクト指向である
498 名前:デフォルトの名無しさん [2008/11/16(日) 02:32:11 ] 同じ文字列を使ってもDigest::MD5で得られる16進とmd5sumの結果が違うのはなぜでしょうか
499 名前:498 mailto:sage [2008/11/16(日) 02:36:14 ] 自己解決しました。 一方には改行コードが含まれていないだけでした。
500 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:31:38 ] perlのマッチ演算子で変数が使えますけど $pat = "foo"; $str =~ /$pat/; # この場合 /foo/ と同じ 変数に含まれる文字を全て普通の文字としてマッチさせるにはどうしたらいいでしょうか。 たとえば $pat = "foo[0]"; だと、/$pat/では[0]の部分を文字クラスとして処理するよう ですが、単純に "foo[0]" という文字にマッチしてほしいのです。
501 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:36:15 ] /\Q$unko\E/
502 名前:デフォルトの名無しさん [2008/11/16(日) 13:14:45 ] dmain.cpp Note: including file: d:/projects/game/include\common.h Note: including file: d:/projects/game/include\product.h Note: including file: d:/projects/etc/psdk/include\WindowsX.h Note: including file: d:/projects/etc/psdk/include\windows.h こういうファイルを dmain.obj: \ /cygdrive/d/projects/game/include/common.h \ /cygdrive/d/projects/game/include/product.h \ /cygdrive/d/projects/etc/psdk/include/WindowsX.h \ /cygdrive/d/projects/etc/psdk/include/windows.h \ dmain.cpp こんな風にするスクリプトってどうやるの?
503 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:57:44 ] perl -ple 's/$/\\/; s/cpp/obj/; s/Note: including file: d:/\/cygdrive\/d/; END{ print "dmain.cpp";} '
504 名前:デフォルトの名無しさん [2008/11/17(月) 20:02:29 ] 質問です。掲示板のプログラムなのですが、データファイル(1行1投稿内容のテキストファイル) を掲示板のCGIのサーバーとは異なるサーバーに置きたいのですが、その場合どのように すればよいでしょうか? できればmySQLサーバーはインジェクションの関係で使いたくあり ません。 サーバー1 掲示板cgiや画像データなどを担当 サーバー2 掲示板テキストデータ(掲示板cgiから読み書きされる) なにかアドバイスをお願いします。
505 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 20:11:26 ] >>504 NFSマウント。とネタレス。 WebProg行け。とマジレス。 その質問だとperl無関係だから、いきなりperlのスレに行くなよ…。
506 名前:デフォルトの名無しさん [2008/11/18(火) 19:27:48 ] www.drk7.jp/MT/archives/001422.html に記載されている通りにやったのですが、 C:\strawberry\cpan\build\DB_File-1.817-XRfyBQ>perl Makefile.pl Parsing config.in... Looks Good. Note (probably harmless): No library found for -llibdb Writing Makefile for DB_File C:\strawberry\cpan\build\DB_File-1.817-XRfyBQ>dmake cp DB_File.pm blib\lib\DB_File.pm AutoSplitting blib\lib\DB_File.pm (blib\lib\auto\DB_File) gcc -c -I/usr/local/BerkeleyDB/include -s -O2 -DWIN32 -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -DPERL_MSVCRT_ READFIX -s -O2 -DVERSION=\"1.817\" -DXS_VERSION=\"1.817\" "-IC:\strawberry \perl\lib\CORE" -D_NOT_CORE -DmDB_Prefix_t=size_t -DmDB_Hash_t=u_int32_t versi on.c version.c:30:16: db.h: No such file or directory dmake: Error code 129, while making 'version.o' と出てしまい、DB_Fileが結局インストールされません。 INCLUDEもLIBも自分の環境に沿って変えているのですが出来ません。 どなたかよろしくお願いします。
507 名前:デフォルトの名無しさん [2008/11/18(火) 20:14:56 ] 長文すみません 以下のjavaを // 平均パケット到着レートの算出&ヒストグラム構成 if (preTimeList.size() >= pktNumForCalcRateAverage) { sampleAveRate = pktNumForCalcRateAverage / (nowTime - preTimeList.remove(0)); int point = (int)(sampleAveRate / gap); histgram[point] += 1; total += sampleAveRate; lineNum += 1; } をperlに書き変えたいのですが # 平均パケット到着レートの算出&ヒストグラム構成 if ($preTimeList.size() >= $pktNumForCalcRateAverage) { $sampleAveRate = $pktNumForCalcRateAverage / ($nowTime - $preTimeList.remove(0)); $point = ($sampleAveRate / $gap); $histgram[$point] += 1; $total += $sampleAveRate; $lineNum += 1; } ではエラーが出てしまいうまくいきません。 nowTimeが間違っているのでしょうか? どなたかアドバイスお願いします。
508 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 21:14:27 ] エラーメッセージは?
509 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 21:56:41 ] それ以前の問題だろ… javaの文章に適当に$つけりゃperlになるとでも思ってんのかねえ?
510 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 21:58:07 ] Perl 6で動かしてるとか
511 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 22:36:19 ] エラーメッセージを読む。 そういうクセをつけてあげないと、本人のために良くないだろ。
512 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 22:57:13 ] すげえ正論っぽいし、事実>>507 に対するレスじゃなきゃ 完全同意なんだけどねえ。 車を運転しようとしてる9歳児に「交通規則は守れるか?」 って問うくらいには見当違いだと思う。
513 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 23:17:55 ] まあまあ、推測に推測を重ねていないで、ここは本人のレスポンスを 待とうじゃないか。
514 名前:デフォルトの名無しさん [2008/11/19(水) 00:13:09 ] >>505 ありがとうございます。別にきいてみようとおもいます。
515 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 00:44:16 ] >>507 - java の . と perl の . の違い - int の意味 - java の size メソッドと perl の scalar @arr で何が得られるか - java の remove メソッドと perl の shift ( or splice ) - 更には各変数と配列に何が入っててどういう状態なのか - 前後にどういう処理が行なわれているか これが直に答えられないなら移植なんか考えない方が良いよ。
516 名前:506 [2008/11/19(水) 03:43:41 ] No library found for -llibdb じゃなくて No library found for -ldb でした…。 どなたかよろしくお願いします…。
517 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 07:47:34 ] >>516 dbは正常にインストールされているのか
518 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 19:35:21 ] >>512 じゃあ何と言うべきなの? キミにはまだ早い、オトナになるまで待ちなさい、とでも?
519 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 19:45:50 ] ゆとり乙 でおk
520 名前:506 [2008/11/20(木) 00:21:04 ] >>517 さん dbというとちょっと分からないのですが、 Berkeley DB 4.6.21 をインストールして、 www.drk7.jp/MT/archives/001422.html に書いてある通りに全ての手順を踏んだのですが、 No library found for -ldb となって出来ないんです…。
521 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 04:46:40 ] ぜんぜん詳しくないけど、あてずっぽうで・・・ gcc -c -I/usr/local/BerkeleyDB/include -s -O2 -DWIN32 -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -DPERL_MSVCRT_ READFIX -s -O2 -DVERSION=\"1.817\" -DXS_VERSION=\"1.817\" "-IC:\strawberry \perl\lib\CORE" -D_NOT_CORE -DmDB_Prefix_t=size_t -DmDB_Hash_t=u_int32_t versi on.c -L オプションが見当たらないけど、なんで? -IC:\strawberry\perl\lib\CORE" って正しいのかな?lib のディレクトリを -I で指定してるけど。 lib ディレクトリにヘッダファイルが入ってるの?? -ldb が無い、って言ってるんだから、ほんとうに無いのか、あるのか、自分の目で確かめたかな? -ldb と省略せずに、\hoge\hage\libdb.l みたいにフルパスで指定してみてはどうか?
522 名前:デフォルトの名無しさん [2008/11/20(木) 20:16:22 ] require 'ファイル名'; とするときに、1つ前のディレクトリにあるファイルを指定したいのですが、どうすればいいでしょうか? require '../ファイル名'; だとエラーがでてしまい、できません。
523 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 21:40:27 ] >>522 1つ前の前に現在地がどこかを考えるんだ ../ や ~/ はシェルの機能なんだ
524 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 02:09:21 ] >>522 スクリプト保存場所と実行場所が同じならそれで動く。 (多分このケースだろうけど)違って場所固定ならスクリプトに use FindBin; require "$FindBin::Bin/../hoge.pl" ; 但し、FindBin はケースによってスクリプト保存場所を 示さない場合があるので、そんな場合には FindBin::Real だか CPAN から引っ張って来て使う。 (蛇足)スクリプト内でカレントディレクトリに動的変化があり、 require する対象も連動変化があるなら、 use Cwd ; しといて require getcwd . q{/../hoge.pl}しなきゃならん。
525 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 02:16:40 ] あ。説明一行目正確じゃねえな。 「保存場所に関係無く、実行場所の ../ にあるならそれで動く。」 に訂正。
526 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 03:33:20 ] まぁたいてい、マウスでクリックして動作させるだろうから カレントディレクトリをスクリプトのあるディレクトリに移動させておく、とか そういう処理が必要だろうな。
527 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 06:37:05 ] >>522 エラーメッセージは?
528 名前:506 [2008/11/21(金) 13:19:05 ] >>521 さん 返信ありがとうございます。 libdb.a というのは前述したURLに書いてある通りに作成しました。 -Lオプションに関してはわかりません…。 確認したところ \strawberry\perl\lib\CORE にヘッダファイルがたくさん入ってました。 -ldbに関しては検索しているのですが、どうしてもわからないんですよね。 やはりWindowsでperl環境は無茶があるのでしょうか。
529 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 17:18:30 ] >>528 なんか>>506 のエラーは エラー情報(version.cないよ、コンパイルエラーみたいな)っていうのは、 そのページの「CPAN で DB_File をインストール → 必ず失敗する。」のところだから そのまま次の「config.in を修正して DB_File を手動で dmake してインストール」 にいけばいいんじゃないの? そこでLIBパス設定してるし
530 名前:506 [2008/11/22(土) 01:11:58 ] >>529 さん 返信ありがとうございます。 修正して、dmakeしたところ C:C:\strawberry\cpan\build\DB_File-1.817-aAwZC0>dmake dlltool --def DB_File.def --output-exp dll.exp g++ -o blib\arch\auto\DB_File\DB_File.dll -Wl,--base-file -Wl,dll.base -mdll -s -L"C:\strawberry\perl\lib\CORE" -L"C:\strawberry\c\lib" version.o DB_File.o -Wl, --image-base,0x2d2e0000 C:\strawberry\perl\lib\CORE\libperl510.a \strawberry\c\ lib\libmsvcrt.a \strawberry\c\lib\libmoldname.a \strawberry\c\lib\libkernel32.a \strawberry\c\lib\libuser32.a \strawberry\c\lib\libgdi32.a \strawberry\c\lib\lib winspool.a \strawberry\c\lib\libcomdlg32.a \strawberry\c\lib\libadvapi32.a \stra wberry\c\lib\libshell32.a \strawberry\c\lib\libole32.a \strawberry\c\lib\libolea ut32.a \strawberry\c\lib\libnetapi32.a \strawberry\c\lib\libuuid.a \strawberry\c \lib\libws2_32.a \strawberry\c\lib\libmpr.a \strawberry\c\lib\libwinmm.a \strawb erry\c\lib\libversion.a \strawberry\c\lib\libodbc32.a \strawberry\c\lib\libodbcc p32.a dll.exp version.o:version.c:(.text+0x7a): undefined reference to `db_version' DB_File.o:DB_File.c:(.text+0x10d5): undefined reference to `db_create' collect2: ld returned 1 exit status dmake: Error code 129, while making 'blib\arch\auto\DB_File\DB_File.dll' となりました…。 blib\arch\auto\DB_File\ には.existsファイルしかありませんでした。
531 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 21:00:21 ] >>530 libdb.a はちゃんと C:\strawberry\c\lib\ にあるのかい?ってのと ↑には libdb.a という文字が登場しないなってのがあやしいかと。
532 名前:デフォルトの名無しさん [2008/11/22(土) 22:41:13 ] さくらインターネットの環境のせいかどうかわからないのですが、LWP::UserAgent mirrprの挙動がおかしいってことはありますか? mirror呼ぶと$tmpfile作るみたいなのだけど、そのstatのrdeb, size, blocksが0になって以下のエラーがでます。 Transfer truncated: only 0 out of 9446 bytes received 何かわかれば教えてもらえますか? LWP::UserAgent 5.819 FreeBSD 6.1-RELEASE-p23 This is perl, v5.8.8 built for i386-freebsd-64int
533 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 23:43:51 ] x64のppmリポジトリってまだないのね。 リポジトリ追加してもパッケージ数が0で何かと思ったらそういうことか…。
534 名前:506 [2008/11/23(日) 01:56:00 ] >>531 さん 解決しました! 531さんに指摘されて、libdb.aという文字が出ないのかを考えたところ、 ファイル名だけ変えていて、拡張子が変わっていませんでした。 要はlibdb.a.libというファイルでした。 なので拡張子変換ソフトを使ったところ上手くいきました! 本当ありがとうございます!
535 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 01:41:41 ] ちょっと前に、WWW::Mechanizeを1.34から1.50にupしたんですが、この1.50の挙動についての質問です。 1.50になってから、$mech->get('example.com/ ')なんかでgetsしてきたページの内容を $mech->content()で書き出すと、utf8フラグ付の文字列に自動でdecodeされたものが出力されます。 ($mech->response->contentでは、そのまま変換なしで返ってきます。) さらにこの状態で、$mech->find_linksやfind_images,$mech->form->inputsなどの戻り値オブジェクトから $_->textや$_->valueなども、utf8_decodeされたものが返ってくるようになりました。 これはこれで、戻り値を正規表現等で検知するのに便利になった部分もあるのですが、 今少しばかり困ったことになっております。 実は、とあるサイトをクロールしていて、そのページ自体はsjisで書いてあるのですが、 ページのheaderに、<meta http-equiv="content-type" content="EUC-JP">とかの記述があって、 どうもこの記述を鵜呑みにして、元の文字列をEUC-JPとしてdecodeをしてしまって、化けバケになりました。
536 名前:535 mailto:sage [2008/11/24(月) 01:42:13 ] そこで、$mech->get()した時に、自動でutf8デコードさせないようなオプションやメソッドを 探したんですが、それが見当たりません。 ドキュメントやソースファイルを読んでみて、Mechanize.pm内部で、$content = $res->decoded_content() が呼ばれているようで、それではとHTTP::MessageやHTTP::Headerにある、Encodingヘッダーやcontent_encoding あたりで制御するのかなと色々やって見ましたが、やっぱりutf8デコードされてしまいます。 (と言うか、イマイチこれらの使い方が合ってるのかよくわかりません。) どなたかこれらの制御方法をご存知の方はおりませんか? 現在のところ、WWW::Mechanizeを1.34以下に戻すか、実行スクリプトの中で *HTTP::Message::decoded_content = sub { shift->content }; と書く、などで回避しておりますが、もっとスマートな方法がないのかなと思っております。
537 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 17:23:57 ] Perl 5.8.6なんですが sysopen(TPL, $file, O_RDONLY) のとこで Argument "O_RDONLY" isn't numeric in sysopen というerrorを毎回吐きます。 動作は見たところ正常ですが、Apacheのerror_logにたまるのが気持ち悪くて…。 どこのサンプルにもマニュアルにも上の通りにかいてありますが、 O_RDONLYじゃいかんのですか?
538 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 17:33:00 ] O_RDONLY が定義されてないからじゃないの? >どこのサンプルにもマニュアルにも上の通りにかいてありますが、 いったい、どこのサンプルやマニュアルを見たんだい? おぢさんがひとつ、いいことを教えよう。 google 「perl O_RDONLY」 パソコンを買ったら、まず最初に google を覚えよう。
539 名前:537 mailto:sage [2008/11/24(月) 19:46:17 ] レスありがたふ そのキーワードで何度もぐぐったんですが ttp://perldoc.jp/docs/modules/CGI-Session-3.11/Tutorial.pod ttp://perldoc.jp/docs/perl/5.8.4/perlfunc.pod こんなんや、他の個人ブログやチュートリアルサイトでも sysopen(HANDLE, path, O_RDONLY); の例が出てくるんですよね
540 名前:537 mailto:sage [2008/11/24(月) 19:49:25 ] 自己解決しました 改めてよく読んだらperldoc.jpに「標準モジュール Fcntl 経由で」って書いてありましたね use Fcntlで解決しました >>537 ありがとうございました
541 名前:デフォルトの名無しさん [2008/11/24(月) 21:43:42 ] 3×3のクロスワードを作ろうと思います。 3文字の辞書ファイルは既にあって 3×3の真ん中には「か」という文字列が入っています。 このとき、3×3のクロスワードを作成するにはどうすればよいでしょうか。
542 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 21:55:33 ] ここって宿題の依頼もありだっけ?
543 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 21:57:31 ] Perlにカスってもいねえし
544 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 22:06:30 ] ゆとりは宿題はやってもらうものと考えてるからな。
545 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 23:26:48 ] 学業も仕事も他人に任せてゆとりの時間を楽しむのがゆとりの正しい姿 宿題をやる仕事を貧しい人達から奪うほど情が無いわけではありません
546 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 00:33:23 ] やってくれって言ってないじゃん!
547 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 01:34:49 ] メール鯖からパイプで渡された標準入力を 上手い事いじらせてくれるモジュールってあったっけ? Net::POP3〜MIME::Parserなら分かるんだが 標準入力しか触れないの扱わんとならんorz テキストをチマチマと拾ってくしかないのか・・・?
548 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 02:15:47 ] 日本語でおk
549 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 05:36:06 ] >>535 WWW::Mechanizeはよく知らないんだけど $res->decoded_content(charset => 'none'); この辺りヒントになるかも
550 名前:532 [2008/11/25(火) 13:39:13 ] mirrorじゃなくてそもそもrequest($url, $file)で$fileに取得できてないってことに気づいた。 おかげでCPANコマンドでも Transfer truncated: only 0 out of 149396 bytes received が出て死んでしまう。 ググっても他に同じような人出てこないし何いじってこうなったんだろう。。
551 名前:535 mailto:sage [2008/11/25(火) 13:39:41 ] >>549 レスありがとうございます。 確かに、LWP::UserAgentからは、$res->decoded_content(charset=>'none')で decodeされないcontentsが返って来るのを確認しました。 しかしながら、Mechanize.pm内では、このdecoded_contentに引数を渡す方法がなく、 またソース内のコメントに、 "Do we need to expose the options there?" みたいなことが書いてありますので、現状では必ずdecoded_content()が呼ばれてしまうみたいです。 そのため、リクエストのレスポンスヘッダやページ内の<meta>タグに、charset指定がある場合は、 それに従った Encode::decode($charset,$html) が返って来ます。 (このdecodeがコケた場合は、変換なしの元々のbyte文字列が返ってきます) code.google.com/p/www-mechanize/issues/list に要望でも出したら対応してくるのかな。
552 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 14:22:15 ] ヘッダの情報に合わせて自分で変換してしまう
553 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 17:05:16 ] >>551 ああ、なるほど。 deflate対応と文字コード変換がセットになってるのがややこしいんですよね。 decoded_content自体に罪は無いけど世の中のページはstrictじゃないページも沢山あるので デフォルトオフか最低でも設定でオフに(WWW::Mechanizeから)出来るように考慮されてるべきだと思います。 >"Do we need to expose the options there?" もちろん! というか主要な部分の挙動変えるなよって感じですが。 こういうPHP的なハマり方は耐えられません。
554 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 02:04:29 ] >>535 WWW::Mechanizeなんてサブクラス化して使うのが当たり前だから サブクラスで好きなように自分好みのcontentメソッド再実装したらいいよ 最近Perl使ってないので的外れなこといってるかもしれないけど 少し前まではMechanizeはそういう使い方が当たり前だった 生のWWW::Mechanizeを使うという考えを発想転換したら?
555 名前:535 mailto:sage [2008/11/27(木) 18:19:54 ] >>552 その発想は..(ry でも確かに、元ページのcharsetが既知ならば、それもありかもです。 >>553 そうなんです。decompress絡みとcharset変換が同じメソッド内で 同時に処理されてるのがなんだかなあと言う気もします。 まあ同意も得られたことですので、>>551 のレポートフォームに 要望でも出そうかと思ってるんですが、ascii文字主体の言語圏の人々に いかにしてこの思いを伝えようかと苦慮しているところです。 (その前に、英語も全然得意でないので、結構ビビッているんですが)
556 名前:535 mailto:sage [2008/11/27(木) 18:22:05 ] >>554 >WWW::Mechanizeなんてサブクラス化して使うのが当たり前だから うーん、そんなもんなのですか? 自分はあんまり継承とかサブクラス化を使わないので、こちらこそ的外れな 意見かもしれませんが、私の個人的な認識(印象?)では、クラスを継承したり サブクラス化するってことは、そのベースクラスの機能を最大限利用しつつ、 それプラス自分なりのメンバ(?)やメソッドを追加したり加工したり するために使うものかと思うのです。 (もしくは、イベント駆動型のmoduleにハンドラを追加する時など) ひょっとして>>536 ,551での書き方か悪かったのかもしれませんが、 今私が不便だと感じているのは、$mech->contentの動作自体ではなく、 $mech->get()した時点で、そこから連鎖的に内部のメソッドが実行され、 linkやformなどの$mech絡みのオブジェクトが、自動でutf8フラグ付に decodeされてしまったものがセットされる、とういうもです。 で、これを抑制したい、回避できないか、と。
557 名前:535 mailto:sage [2008/11/27(木) 18:22:37 ] つづきです。 確かに仰るとおり、気に入らない動作や挙動の関数なら、自前の関数でも 書いて上書きでもしてしまえっ、という考えは自分にもありますので、 どれを上書きすべきかと探索し、decoded_content()に行き着きました。 そこで>>536 の一行を追加し、とりあえずその場しのぎをしたんですが、 他の制御方法(mechの外からメソッドや、オプションを渡すなどで) をご存知の方がおられないかと思い、書き込みさせて頂きました。 ちなみに今回の例を、クラスメソッドを再定義して対処するとなると、 _update_page()と言う事になりますが、このメソッド全体をコピペして、 対象の一行だけ削除なりコメントアウトなりすれば目的は達成できますが、 ベースとなるクラスメソッドを再利用しないで一から再定義するような やり方が、mech使いの方には一般的なのでしょうか。 (自分的には、この_update_pageに伴って生成されるlinkやformオブジェクト は大変重宝しており、出来ればそのまま利用したいです。ですが今回の場合、 元の動作の一部をスキップするのが目的のため、$self->SUPER::(base_method) が利用できないので、あまり継承する意味が無いような気がするのですが) 長文、連投になってしまい、どうもすいません。
558 名前:デフォルトの名無しさん [2008/11/27(木) 19:13:28 ] 今入ってるレンタルサーバでmod_perlが使えると知り、 バージョンを調べたら1.9916となっていました。 この番号はどう読めばいいんでしょうか。 バージョン1にパッチ9916があてられている・・・のかな? 自宅の制作環境(Win)にも近いバージョンのものを入れたいのですが そのものズバリは見つかってなくて、どう選んだものか迷っています。 アドバイスよろしくお願いします。
559 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 01:21:41 ] >>556 失礼 content()はアクセサーだからget()で内部メソッドを辿る必要があったわ で、問題はもう自分でも解決してるみたいだけど、 _update_page()内のdecoded_content()の呼び出し ここの引数リストが空なので、メンバ変数なりクラス変数なりで渡すように サブクラスで再定義するといい >ベースとなるクラスメソッドを再利用しないで一から再定義するような >やり方が、mech使いの方には一般的なのでしょうか。 別にサブクラスじゃなくてもいいけど、サブクラスに定義した方が再利用性が高い コンパイル時に確定するので、順番とか気にしなくていい などのメリットがあると思われる ていうかオブジェクトクラスはサブクラス化することに意義があるし、そのように使われる ことを意識して書かれてることが多い 例えば、サブクラスで実装されることを意識して空のサブルーチンを置いたりする
560 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 23:28:35 ] 画像編集だとImageMagickあたりが定番かなと思いますが、 動画だったらffmpegあたりでしょうか?
561 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 06:54:09 ] 質問です。PerlでリモートのIISにWEBDAVの基本認証で接続し、 ファイルをアップロードしたいのですがうまくいきません。 #!/usr/bin/perl use HTTP::DAV; $d = new HTTP::DAV; $url = "192.168.0.100/dav/ "; $d->DebugLevel(3); $d->credentials( -user=>"user_name",-pass =>"pass", -url =>$url); $d->open( -url=>"$url") or die("Couldn't open $url: " .$d->message . "\n"); #処理 というソースなのですがオープンで失敗します。 >Couldn't open 192.168.0.100/dav/: Unauthorized. 長いので一旦切ります。
562 名前:561 mailto:sage [2008/11/29(土) 06:55:28 ] /tmp/perldav_debug.txtを見ると <?xml version="1.0" encoding="utf-8"?><D:propfind xmlns:D="DAV:"><D:allprop/></D:propfind> PROPFIND RESPONSE>> HTTP/1.1 401 Access Denied Connection: close Date: Fri, 28 Nov 2008 21:18:18 GMT Server: Microsoft-IIS/5.1 WWW-Authenticate: Basic realm="192.168.0.100" Content-Length: 4395 Content-Type: text/html Content-Type: text-html; charset=shift_jis Client-Date: Fri, 28 Nov 2008 21:18:29 GMT Client-Peer: 192.168.0.3:80 Client-Response-Num: 1 Client-Warning: Redirect loop detected (max_redirect = 7) Title: このページを表示する権限がありません X-Meta-ROBOTS: NOINDEX <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html dir=ltr> 以下HTML と返ってきてるようです。 IIS側の認証方法の設定としては基本認証のみチェック、既定のドメインと領域は空、 匿名アクセス、統合Windows認証のチェックは共に外してあります。
563 名前:561 mailto:sage [2008/11/29(土) 06:56:08 ] 同じ設定でWindowsのDAVクライアントCarotDAVから接続した場合はうまくいきます。 そのときのログは Request To 192.168.0.100 > PROPFIND /dav/ HTTP/1.1 > User-Agent: Rei.WebDAV/1.5.3 > Depth: 1 AuthorizationMethod = Basic <HTTP/1.1 207 Multi-Status < Transfer-Encoding: chunked < Content-Type: text/xml < Date: Fri, 28 Nov 2008 21:19:18 GMT < Server: Microsoft-IIS/5.1 < [MESSAGEBODY LENGTH:9957] こうなってます。ブラウザFirefoxから接続した場合もdavフォルダを閲覧することができます。 また、IIS側の設定を変え、匿名アクセスにチェックを入れた場合はPerlからも普通に接続できます。 ログから見るに いろいろ調べたところHTTP::DAVからの接続が AuthorizationMethod = Basic になればいいような気がするのですがその書き方がわからない、という状況です。 HTTP::DAVモジュールでの基本認証(?)の設定の仕方がわからないので LWP::UserAgentで基本認証で接続するとうまくいくのですが、 今度はPUT(アップロード)の仕方がわかりません。 最終的にはPerlでアップロードできればいいのですが、なにかいい方法ご存知でしたら ご教授いただきたく思います。 引き続きこちらでも調べて見ます。
564 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 13:46:35 ] Perlプログラミング初心者です。 困っていますので、助けてください。 以下のようなデータを持っています。 ----------------------------------- xおだ 56 80 90 xとよとみ 90 85 45 xとくがわ 90 90 100 ----------------------------------- 1行目は名前のまえにxという印がついている 2行目に各教科の点数(0から100)がスペースで区切られている。 たとえば、左から国語、算数、理科 3行目は殻行 ----------------------------------- このデータから、それぞれの教科の点数による分布表をつくりたいのですが、どのように書いたらいいのか教えてください。 具体的には、 国語の100点は何人で、99点は何人で、、、、0点は何人。 同じように、算数と理科です。 どうぞよろしくお願いします。
565 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:03:52 ] 「初心者です」って免罪符つけないほうが良いぞ 嫌う奴も居るから
566 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 15:22:14 ] >565 この場合は微妙だが、短絡的すぎないかw そりゃ「初心者なので教えてください」は死ねって思うけど、例えば 1ヶ月くらい前にPerlの勉強を始めた初心者です。 Perl/CGIの入門書に載っている、簡単なBBSくらいは作れるようになりました。 とかなら、教える側にしても重要な情報だべ?
567 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 15:53:12 ] 「困ってます。助けてください」 も誰にもメリットのない無意味な免罪符。
568 名前:567 mailto:sage [2008/11/29(土) 16:08:50 ] まぁいっか。ただし、記述では書いてやらん。 以下の説明を元に自分で作れないならもう諦めてくれ。 その前に-------- ファイル保存形式は変更可能なら変更したほうが読みやすい。(プログラムがな)。 perlの場合、順番に〜、とか他のプログラムで扱ってるのと同じでもいいけど、 いちいち名前つきデータにしたほうが便利になる。 無意味な空行もなくしていいならなくしたほうがいい。 ---------------- 1:ファイルを開いて変数に移す。 どうゆう構造で格納すればいいのかは使う人が考えてくれ。 リファレンスを使うと望みどおりに格納できる。 2:sortを使ってデータを意図したとおりに揃える。 3:出力して終了 ただし、$name{'おだ'}->[0]; みたいな形式で格納してしまった場合に特定の点数の者が何人いるかを調べるとき、 たぶんデータをループにかけて全チェックせねばならない。 そんだけの用途なら、 $marks[0]->[90] = ('name_1', 'name2'); #つまり国語90点の人全員の名前 と格納したほうが良い
569 名前:567 mailto:sage [2008/11/29(土) 16:11:52 ] まちがた。 $marks[0]->[90] = ['name_1', 'name2']; #つまり国語90点の人全員の名前 こうか どうでもいいか
570 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:21:14 ] gmplayerに配信元を渡す為に、 ブラウザでasxファイルをクリックしたら起動するように関連付けた 以下のようなものを作ってみました。 #!/usr/bin/perl use strict; use warnings; my $mplayer = 'gmplayer'; my @media ; while (<>) { /=\s?\"((?:http|mms):\/\/.*(?:wmv|wsx|wma|asf|mp3|mp4))\"/; push @media, $1 if ($1 ne ''); } @media ? exec $mplayer, pop @media : die "There is no streaming lines in this asx file!\n"; チェックの為にシェルからasxファイルを引数にして起動したところ、 わざとマッチする行が無いasxファイルでチェックした時には Use of uninitialized value in string ne at ./mp_wp line 11, <> line 1. Use of uninitialized value in string ne at ./mp_wp line 11, <> line 2. (以下略) There is no streaming lines in this asx file! という風に警告を表示されてしまいました。 この警告を出さなくするにはどうしたらいいのでしょうか?
571 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:42:37 ] >>570 use warnings;の一行を取っ払えば解決
572 名前:570 mailto:sage [2008/11/29(土) 16:51:02 ] >>571 いえ、use warningsのままどうにかならないものかと…。
573 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 17:02:05 ] <>を使うのをやめる
574 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 17:02:50 ] >>570 defined $1
575 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 17:03:18 ] パターンマッチしたならその結果を見てやれよw
576 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 17:08:33 ] >>570 >Use of uninitialized value in string ne at ./mp_wp line 11, <> line 1. ちゅうのはあれだ、$1 を ne で扱って評価しとるからで、 ($1 ne '') は ($1) じゃいかんのかね。 パターンマッチからして undef 以外の 0 や '0' が来る筈ない場所だしなあ。
577 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 18:55:57 ] >>564 勉強中なんで、腕試し。こんなもんかな?(未検証) open (IN, "Seiseki.txt"); while(<IN>){ if (/(\d+) (\d+) (\d+)/) { $Kokugo[$1]++; $Sansuu[$2]++; $Rika[$3]++; } } close(IN); print "点数 国語 算数 理科\r\n"; for(0..100){ printf("%4d %4d %4d %4d\r\n", $_, $Kokugo[$_], $Sansuu[$_], $Rika[$_]); }
578 名前:570 mailto:sage [2008/11/29(土) 19:06:42 ] >>573-576 ご教示ありがとうございます。 色々やり方があるんですね。if文の()内を(defined($1))にしたら警告が消えました。
579 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 20:53:53 ] >>564 勉強中の自分も作ってみた。 my @subjects = qw(国語 算数 理科); my %names_of; open my $in, "seiseki.txt" or die "can't open : $!"; while (<$in>) { if ( /^x(.+)/ ) { chomp(my @marks = split / /, <$in>); for (0..$#subjects) { push @{$names_of{$subjects[$_]}{$marks[$_]}}, $1; } } } close $in; for my $subject (@subjects) { print "≪$subject≫\n"; for my $mark ( sort {$a<=>$b} keys %{$names_of{$subject}} ) { printf "%3d : %3d人\n", $mark, scalar @{$names_of{$subject}{$mark}}; } }
580 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 00:12:06 ] ここ宿題スレじゃないんだけど
581 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:03:38 ] 1ファイルの変換なら perl henkan.pl page1.html > mypage1.html じゃなかったら open ( IN , "page1.html" ) or die; open ( OUT , ">mypage1.html" ); while( <IN> ){ s/こぬにちは/こんにちは/; print OUT; } close(OUT); close(IN); で出来るんですけど、フォルダにhtmlファイルが60個もあるので まとめてやりたいのですが、 My_folder---page1.html,page2.html ………page60.html の全部に一括して処理するにはどう書けばよいでしようか
582 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:07:12 ] for ( @ARGV ){ open IN, $_ ; # 略 close IN ; }
583 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:12:18 ] for ( @ARGV ){ open IN, $_ ; while( <IN> ){ s/こぬにちは/こんにちは/; print $ } close(IN); こうでしょうか? 済みません 馬鹿なんで 略無しで書いてくれると嬉しいです
584 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:24:41 ] >>581 system("perl henkan.pl page$_.html > mypage$_.html") for(1..60);
585 名前:582 mailto:sage [2008/11/30(日) 13:28:24 ] 甘えんなよ、自分で考えろよ…。 後、「初心者スレ」てーのが WebProg にあるからそっち逝ってくんね? 「誘導してください」なんて言ったら切れるぞ?
586 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:32:23 ] henkan.plは変わりないままで コマンドプロンプトのところで henkan.pl page1.html > mypage1.html のかわりに system("perl henkan.pl page$_.html > mypage$_.html") for(1..60); と書いてリターンでしょうか? すみません バカで。
587 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 14:26:34 ] わからない七大理由 1. 読まない ・・・説明書などを読まない。読む気などさらさらない。 2. 調べない ・・・過去スレ、ググるなど最低限の内容も自分で調べようとしない。 3. 試さない ・・・めんどくさいなどの理由で実行しない。する気もない。 4. 理解力が足りない ・・・理解力以前の問題で理解しようとしない。 5. 人を利用することしか頭にない ・・・甘え根性でその場を乗り切ろうとする。 6.感謝しない・・・教えてもらって当たり前。事がすんだらさようなら。 7.逆切れする・・・自分の思うようにならないと逆切れする。
588 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 14:45:12 ] >>586 henkan60.plとかの名前で上の1行を保存 perl henkan60,pl で、実行。 試してないんで、うまくいかなくてもかんべんな。
589 名前:デフォルトの名無しさん [2008/11/30(日) 14:57:09 ] 過去ログにもうあったらごめんなさい。 HTTP::Requestで画像ファイル(gif)を取得して、サーバに保存したいのですが、 $response->content()をそのまま保存しても画像になりません。 コード my $req = new HTTP::Request("GET",$url); local $response = $ua->request($req); print "Content-type: text/html\n\n"; print $response->code(); print $response->message(); print $response->content(); open OUT,">> ./maptest.gif"; print OUT $response->content(); close OUT; 環境はwindowsXP perl v5.10.0 Apache2.2です 誘導でもかまいませんので、ヒントをください。
590 名前:588 mailto:sage [2008/11/30(日) 15:02:02 ] ひとつにまとめるななら、 for(1..60){ my $n = $_; open ( IN , "page$n.html" ) or die; open ( OUT , ">mypage$n.html" ); while( <IN> ){ s/こぬにちは/こんにちは/; print OUT; } close(OUT); close(IN); }
591 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 15:10:35 ] >>589 Windows なら binmode OUT; で成功するかも
592 名前:デフォルトの名無しさん [2008/11/30(日) 15:13:33 ] 591さん 早速の回答ありがとうございました。 書き込みの部分を open OUT,"> ./maptest.gif"; binmode OUT,":raw"; print OUT $response->content(); close OUT; として、教えていただいた、binmode を付けることで解決しました。 ありがとうございました。
593 名前:581 mailto:sage [2008/11/30(日) 16:10:29 ] 本当に助かりました。ありがとうです!
594 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 18:40:44 ] my $q = new CGI; と my $q = CGI->new(); ではどっちがカッコイイ書き方なんでしょうか?
595 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:12:20 ] new CGI は後方互換な「間接オブジェクト記法」 間接オブジェクト記法にはトラップがあるのが明記されてる が故に CGI->new() の方が良いとされる。 が、現実では頻繁にコンストラクタを呼ぶ時にだけ 間接オブジェクト記法は使われている。 つーことで、new の時はどっちでもいいじゃね?method 呼ぶ時に 間接オブジェクト記法したら「変態さんがいる!」って言われるかも しれんけどさ。
596 名前:594 mailto:sage [2008/12/02(火) 21:18:55 ] >>595 なんと!ありがとうございます。 Perlのオブジェクト関係はもっとキチンと勉強せねば…。
597 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:20:58 ] 感嘆詞のニュアンスが微妙な気がしなくもないこともなくはないんだが。
598 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:34:11 ] 変態さんにびっくりしたのでは
599 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:21:54 ] { package Foo ; sub new { bless {}, shift } sub get { "hoge\n" } } print Foo->new->get ; # 直接ならあっさり # 間接が一個でも混ると #print get new Foo ; # ダメ #print get { new Foo } ; # ダメ print STDOUT get { new Foo } ; print STDOUT get { Foo->new } ; print do{ new Foo }->get ;
600 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:24:05 ] 確かにこれならMな変態さんと呼ばれても仕方ないな
601 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 23:34:03 ] なんと!スープです
602 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 07:46:58 ] >>595 「後方互換」てーのは語弊がある書き方だな、、と自己レス perlobj の "Indirect Object Syntax" の項に説明がある。
603 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 12:49:12 ] 関数呼び出しの時に & つけたりつけなかったり なんなんですか?
604 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 13:26:44 ] >>603 www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq7.html#what_s_the_difference_between_calling_a_function_as__foo_and_foo__ perldoc.jp/docs/perl/5.10.0/perlsub.pod
605 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 13:54:41 ] >>604 ありがとうございました。 よくわかりませんでしたが・・・。付けるに超したことはないのかな。
606 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 15:36:25 ] >>605 組込み関数を全て覚えてて関数名ダブらない自信があるんなら付けてなくてもいいけど、 それまでは付けた方が良いってリャマの人が言ってた! アンパーサンドなしじゃ関数名がダブったら組込み関数の方を呼びに行っちゃうからね。
607 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:05:47 ] PBPでは付けるなって言ってるな。 (サブルーチンのリファレンスが欲しい時以外)
608 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:33:41 ] CPANあたりみても"&"つけてない方が圧倒的に多いし、使えるからといって 組み込み関数とだぶった名前つけたら読みにくくなるだけじゃないか。 あと、サブルーチン呼び出しの&の有無は完全に等価ではなくて、プロトタイプ まわりや引数を省略したときの振る舞いなんかが違うので注意な。 sub f(\@) { my($x) = @_; print join(",", @$x), "\n"; } @array = (1, 2, 3); f(@array); # 1,2,3 &f(@array); # 空文字列 sub g { my(@x) = @_; print join(",", @x), "\n"; } sub g1 {g;} sub g2 {&g;} g1(1,2,3); # 空文字列 g2(1,2,3); # 1,2,3
609 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:43:06 ] いや普通は付けないが Perl初心者は慣れるまでは付けるようにしておけ、 という事だよリャマ本
610 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 18:52:12 ] バッドノウハウ論議って楽しいよな
611 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 21:10:02 ] 初心者っぽく見えるから俺はつけない
612 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 22:10:49 ] シンタックスハイライトのついたエディタ使えば組み込みとダブるなんて 意識して書かない限りやらないだろ・・・
613 名前:デフォルトの名無しさん [2008/12/04(木) 12:16:49 ] >>608 > sub f(\@) { > my($x) = @_; > print join(",", @$x), "\n"; > } > > @array = (1, 2, 3); > &f(@array); # 空文字列 この結果、ひどいな。。。 いや、昔の perl だと普通か。。。
614 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 12:40:56 ] >>613 プロトタイプ指定は「組込関数のように振る舞える」のが肝なので、 わざわざ & を付けて区別するのは何を意図してるの?って感じだ。 ヘンな言葉遣いをすればヘンに解釈されるってだけじゃん。
615 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 14:10:34 ] >>614 初心者が 「慣れないうちは&をつけとこっと」 って思って勉強が進む。そのうち関数プロトタイプのことを知り、試す。 「あれ?」 っていうストーリー。
616 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 16:17:28 ] &も()も必ず付ける。それが俺のジャスティス。
617 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 16:19:21 ] 必ずつける人はPythonにでも行った方が幸せになれる
618 名前:デフォルトの名無しさん [2008/12/04(木) 17:02:44 ] ppm install DBD-mysql するとないって言われるんだが・・俺だけ?? 情報求むm(_ _)m
619 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 18:12:16 ] ――なにが幸せかわからないのです。本当にどんな辛いことでもそれが正しい道を 進む中での出来事なら、峠の上り下りもみんな本当の幸いに近づく一歩ずつですから。
620 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 18:33:06 ] >>618 「DBD-mysql PPM リポジトリ」でググッて好きなページを参照して。
621 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 21:58:48 ] 1から99までに含まれる奇数を出力するプログラムを書いてみたんですけど これ以上短くすることは可能ですか? print$_%2?"$_ ":()for 1..99
622 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 22:08:38 ] $_%2&& print for 1..99
623 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 22:22:24 ] print $_*2+1,' 'for 0..49
624 名前:621 [2008/12/04(木) 22:46:56 ] >>622 即レスありがとうございます なるほど!! でもそれだと半角スペースがないですよね? できれば半角スペースは入れたかったんですけど… >>623 ありがとうございます 普通に足していく方法ですか 確かに短くなりますねw うまく説明できないんですけど演算を上手くつかって短くしたいんですよね 説明不足ですみませんでした
625 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 23:03:57 ] print$_%2?$_:' 'for 1..99
626 名前:デフォルトの名無しさん [2008/12/04(木) 23:59:40 ] >>620 ありがとうございますm(_ _)m
627 名前:621 mailto:sage [2008/12/05(金) 00:59:21 ] >>625 ありがとうございます 偽の場合の式をうまく使ってますね 何か書かないといけないから空のリストを置いてたんですけど これだと無駄がない感じになりますね
628 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 02:11:14 ] $,=" ";print 1..99
629 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 02:14:04 ] 痛たたた……
630 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 02:16:48 ] あ、奇数か。スマソ $,=" ";print grep{$_&1}0..99 短くないな…