1 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 22:35:39 ] "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についての質問箱 28箱目 pc8.2ch.net/test/read.cgi/tech/1162273941/ リンク集は>>2-3 過去スレは>>4
331 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 11:02:27 ] 質問します。 foreach( sort(glob("*")) ){ if(-d){ @local_dir = (@local_dir,$_) ; }elsif(-f){ @local_file = (@local_dir,$_) ; }else{ print "Not Support Format -> $_\n" ; } } ファイルとディレクトリに分けたいのですが、 ローカルだと上記のようにできますが、(他にスマートなやり方があるかもしれませんが。。) ftp上のファイルを区別する方法はありますでしょうか。 以下ではどちらも同じファイルを取得してしまいます。 use Net::FTP; my $ftp = Net::FTP->new($host); $ftp->login($user, $pass); foreach( $ftp->ls("./") ){ print "$_\n" ; } foreach( $ftp->dir("./") ){ print "$_\n" ; } $ftp->quit;
332 名前:327 mailto:sage [2007/01/16(火) 11:19:46 ] >>330 全角数字0から9を繰り返すのを160文字 + .txt のファイル名を用意したら再現しました。 全角数字100文字の場合はファイル名が取得できました。 パスは D:\test で実験しました。 95系は絶対パスで255byte以下、 NT系は絶対パスで255文字以下と認識してるのですが このへんの絡みですかね?
333 名前:327 mailto:sage [2007/01/16(火) 11:26:39 ] >>331 Net::FTP::Fileにisfileとisdirってメソッドあるよ。 インスコするかインスコできないならCPANでソース閲覧して参考にすればいけるのでは
334 名前:327 mailto:sage [2007/01/16(火) 12:18:54 ] 似たケースを見つけた。 ActivePerlのバグ? www.namazu.org/ml/namazu-win32-users-ja/msg01954.html
335 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 12:31:39 ] バグではなく仕様。 WinAPIでも使っとけ。
336 名前:331 mailto:sage [2007/01/16(火) 13:23:32 ] >>333 出来ましたー。 最初ソース見て作ろうと思いましたが 面倒臭くなって結局インスコしましたw ありがとうございます。
337 名前:327 mailto:sage [2007/01/16(火) 13:44:46 ] >>336 もめでとう! こっちはいまだにはまり中 orz >>335 バグじゃなくて仕様なの? ちなみにWin32::APIを使ってみたけどなぜか取得できない。。。
338 名前:327 mailto:sage [2007/01/16(火) 13:51:26 ] Win32::APIを使った再現スクリプト ---- #!/usr/local/bin/perl use strict; use utf8; use warnings; use Data::Dumper; use Encode; use File::Spec; use FindBin; use Win32::API; Win32::API::Struct->typedef('FILETIME', qw( DWORD dwLowDateTime; DWORD dwHighDateTime;)) or die $!; Win32::API::Struct->typedef('WIN32_FIND_DATA', qw( DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[260]; TCHAR cAlternateFileName[14];)) or die $!; my $FindFirstFile = Win32::API->new('kernel32', 'FindFirstFile', 'PS', 'N') or die $!; my $FindNextFile = Win32::API->new('kernel32', 'FindNextFile', 'NS', 'I') or die $!; my $FindClose = Win32::API->new('kernel32', 'FindClose', 'N', 'I') or die $!; my $path = File::Spec->catdir($FindBin::Bin, '*'); my $FindData = Win32::API::Struct->new('WIN32_FIND_DATA') or die $!; my $hFind = $FindFirstFile->Call($path, $FindData); $hFind == -1 and die $!; my @list = ($FindData->{cFileName}); push @list, $FindData->{cFileName} while $FindNextFile->Call($hFind, $FindData; $FindClose->Call($hFind); print Dumper(\@list); __END__
339 名前:327 mailto:sage [2007/01/16(火) 13:56:10 ] 書込み時に改行多いって怒られたから改行を削ってたら FindNextFileの閉じ括弧までまちがえて削っちゃった orz >>338 のソースは ×push @list, $FindData->{cFileName} while $FindNextFile->Call($hFind, $FindData; ○push @list, $FindData->{cFileName} while $FindNextFile->Call($hFind, $FindData); でお願いします。 m(_ _)m
340 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 13:56:31 ] この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されています。 この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、 パスの前に "\\?\" という接頭辞を追加してください。 詳細については、MSDN ライブラリの「File Name Conventions」(ファイル名の規則)を参照してください。
341 名前:327 mailto:sage [2007/01/16(火) 14:45:03 ] >>340 どもです、自分もおんなじ情報に行き当たりました ;p mag.autumn.org/Content.modf?id=20050930181032 Find(?:First|Next)FileじゃなくてFind(?:First|Next)FileWを使えってことなんですね。。。 ディレクトリのファイル一覧を取得する部分だけで苦労するな。。。
342 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 14:51:49 ] >>327 msdn2.microsoft.com/en-us/library/aa365740.aspx typedef struct _WIN32_FIND_DATA { ... TCHAR cFileName[MAX_PATH];
343 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 23:00:35 ] 作ってもらった __ | | | | ___ ___ | | . / | __ _____ / _ \ | | / /| | / / / ____/ / / > l | |. / / .| |. / / / /.. _ /  ̄ / | |/ / | |/ / /  ̄ ̄_/ / \ | /. | / / / ̄ ̄ __ / / ̄ ̄> | | / |___/ ./  ̄ ̄ ̄ / /  ̄ ̄ /  ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ _____ ___ ___ ___ ______ /__ __/ [][] _| |_| |__ _| |_ | ___ \ / / | _ | |_ レ'~ ̄| | | \ l | |_  ̄| | / / / /| | | |____/ / \__| | |  ̄ /_ /. | |_ | ____/ ___ __ __/ヽ |_|. |__|. \/ | | /`、_/_/ / _ ヽ / _ / | | ヽ / | l l l | l l l | | | l ヽ  ̄ / ,ヽ  ̄ /  ̄  ̄  ̄ ̄ / __ ヽ | l l l ヽ  ̄ ̄ / ~ ̄ ̄~
344 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 23:04:28 ] ちょっとでかいな
345 名前:327 mailto:sage [2007/01/17(水) 01:05:42 ] ActivePerlではうまくいかないみたい。。。 aspn.activestate.com/ASPN/Mail/Message/libwin32-perl/2995279
346 名前:327 mailto:sage [2007/01/17(水) 06:15:16 ] aspn.activestate.com/ASPN/Mail/Message/2996684 こちらのやり方で取得出来ました。 何度も自己レスすみませんでした m(_ _)m
347 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 18:25:14 ] Perl 覚えたらこんなもの作れるようになりました。 █ █ █ █ █▀▀▀▅ ▀▅ ▅▀▅ ▅▀ ▅▅▅ █▅▅▅ █ █ ▅ ▅ ▅▅▅ ▅▅▅▅ █ █ █ █ █▅▅▅█ █ █ █▀▀▀ █▀ █ █ █▅▅█ ▀▅▀ ▀▅▀ █ ▅ █ █ █ █ █ █ █▅▅▅ ▀ ▀ ▀▀▀ ▀▀▀▀ ▀ ▀ ▀▀▀ ▀▅▅▅▀ ▅▅▅▅▅▅ ▅ ▅ █ ▀▀▀▀ ▅▀ ▅ █ ▅▅▅█▅▅ ▀▀█▀▅▀▀▀▅ █ █ ▀ ▀▀▀█ █ ▅█▀ █ █ █ ▅▅▅▀ ▅▀█ █ ▀▅ █ ▀ █ █ ▅ ▀▀▀ ▀ ▀ ▀
348 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 19:19:36 ] perldoc.jp/docs/perl/5.6.1/perlfaq5.pod の どうすればファイルハンドルをサブルーチンに局所化できますか?〜 の項目にあるサンプルコードの local $_; # ← とても重要 の意味は一体なんでしょうか。
349 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 19:31:19 ] sub owata { # local $_; $_ = "\(^o^)/"; } $_ = "/(^o^)\"; owata; print; local $_; の行をコメントアウト/インして実行してみよう!
350 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 19:48:51 ] ありがとうございます。でも余計にわからなくなったorz 実はこんなコード書いて試してみたんですがlocal $_;あっても無くても同じように動くんですよね # lstはファイル名のリスト open (FH, '< lst') or die; while (<FH>) { print; &localtest } close FH; sub localtest { local *FH; open (FH, $_) or die; #local $_; while (<FH>) { print } } 何が違うのかも教えていただけたらうれしいです。
351 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 19:58:12 ] $_はグローバルだから他で使われてるかもしれない。特に 左辺値でないもののaliasだったりすると値を書き換えることも できないしな。 foreachのときは暗黙にlocalにしてくれるけど。
352 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 21:12:34 ] >>350 localtest 呼び出しの後 $_ は書き換わってるけど、 すぐに次のループに入るので問題がないだけ。 while (<FH>) { print "begin: $_"; &localtest; print "end: $_" } とかやってみると、違いがわかると思うよ。
353 名前:350 mailto:sage [2007/01/17(水) 23:02:32 ] ありがとうございます。ようやく理解できました しかし350のコードはアホですね…何をやっているんだか この分じゃ他にもいろいろ勘違いしていることありそうで怖いです。 とりあえずほとんど理解せず使ってる型グロブをもうちょっと調べてみよう…
354 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 00:01:12 ] 間接的なファイルハンドル使おうよ open my $fh, '<', 'filename' or die;
355 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 02:29:27 ] FileHandleやIO::Fileって使わないの?
356 名前:331 mailto:sage [2007/01/18(木) 09:36:42 ] 331で質問したモノです。 また壁にぶち当たりました。 ftpしたあとのファイル、ディレクトリの日付、サイズを取得したいので調べてましたが use Net::FTP::File;のNet::FTP::fstatは作りかけのようで使用出来ませんでした。 $ftp->dir(./)で拾って日付を抜こうと思いましたが、日本語環境と英語環境で 表示が異なるので断念しました。 何か取得方法はないでしょうか。 use Net::FTP; my $ftp = Net::FTP->new($host); $ftp->login($user, $pass);
357 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 09:45:05 ] >>356 > 何か取得方法はないでしょうか。 マニュアルを見ると分かるんじゃないでしょうか
358 名前:デフォルトの名無しさん [2007/01/18(木) 12:07:32 ] Perlで文字列にunicodeが含まれているかどうかを判断するにはどうすればいいですか?
359 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 12:20:56 ] 「文字列にunicodeが含まれている」という言い方があいまい杉。 あるバイト列の文字コードがunicode由来のものであることを知りたいのか (エンコーディングの仕方が何通りもあるので) → Encode::Guess。ただし完全な判定は無理。 UTF-8フラグが立った文字列であることを知りたいのか →Encode::is_utf8(あるいはutf8::is_utf8) それともぜんぜん別のことなのか
360 名前:デフォルトの名無しさん [2007/01/18(木) 12:45:35 ] >>359 unicode由来のもであるかどうかです それと環境はPerl5.0でJcode.plです
361 名前:356 mailto:sage [2007/01/18(木) 13:54:08 ] 調べていたらNet::FTPのmdtmが使えそうだったので 書いてみましたがエラーが出ました。 使い方が間違えているのでしょうか。 $host = "***" ; $user = "***" ; $pass = "***" ; use Net::FTP; my $ftp = Net::FTP->new($host); $ftp->login($user, $pass); foreach($ftp->ls()){ $aaa = $ftp->mdtm($_) ; print "$aaa\n" ; }
362 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 16:20:51 ] >>361 Net::FTPの使い方としては間違ってないよ。 エラーってnot a plain fileのことか? とりあえずエラーの理由知りたけりゃDebug=>1設定しなさい。
363 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 16:24:58 ] >>360 jcode.pl は Unicodeには対応していないはず。 Perl 5.0 なんて時代遅れなもの使うのやめたら?
364 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 16:29:49 ] 時代は6だな
365 名前:361 mailto:sage [2007/01/18(木) 16:36:17 ] --------------------------------------------------------------------------- #!/usr/local/bin/perl -w -- # -*-Perl-*- use strict; use warnings; use Net::FTP; my $host = "txfs02" ; my $user = "g-fan" ; my $pass = "fan" ; my $aaa ; my $ftp = Net::FTP->new($host); $ftp->login($user, $pass); foreach($ftp->ls()){ $aaa = $ftp->mdtm($_) ; print "$aaa\n" ; } --------------------------------------------------------------------------- ↑これを実行すると一つのファイルにつき↓このメッセージが出ます。 色々試してはいますが詰まっていますorz Use of uninitialized value in concatenation (.) or string at bbb.pl line 15.
366 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 16:47:09 ] >>365 >Use of uninitialized value in concatenation ... 何も無いものをprintしようとしたからwarningsが出たわけ print "$aaa\n"; を print "$aaa\n" if $aaa; で
367 名前:361 mailto:sage [2007/01/18(木) 16:52:50 ] >>366 そうなんです。 全てのファイルのmdtmがundefになってるんですよね。 だいたい”foreach($ftp->ls()){”でファイルを拾っているので ファイル名を間違えているとかそういうのは無いはずなんですが。
368 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 17:03:16 ] Debug=>1にすると俺の環境では ディレクトリはエラーでnot a plain fileを返してる(undef) ファイルはtimeを返してる
369 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 17:07:02 ] >>367 > ファイル名を間違えているとかそういうのは無いはずなんですが。 「はず」じゃなく確認しる。 とはいえ、手元で動かしてみたところ、同じエラーが出て失敗したり 成功したりする。なんじゃらほい。
370 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 17:15:03 ] >>369 > とはいえ、手元で動かしてみたところ、同じエラーが出て失敗したり > 成功したりする。なんじゃらほい。 急いで捕捉すると、テストに使った対象ftpサーバが、複数個をラウンドロビン していたようた。要するに、ftpサーバソフトウェアによって成功したり 失敗したりしていたようだ。
371 名前:361 mailto:sage [2007/01/18(木) 17:17:49 ] >>368 すみません。 Debug=>1の意味が理解できていませんでした。 今調べてDebug=>1で流したらこんなメッセージになっています。 Net::FTP=GLOB(0x15ecd4)>>> MDTM xxx.log Net::FTP=GLOB(0x15ecd4)<<< 500 'MDTM xxx.log': command not understood. Use of uninitialized value in concatenation (.) or string at bbb.pl line 16. MDTMというコマンドがないみたいですが↓このファイル見たら_MDTMならあるけど MDTMはありませんでした。 /usr/local/lib/perl5/5.8.6/Net/FTP.pm >>369 調べましたがちゃんと見れていました。
372 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 17:36:30 ] >>371 > Net::FTP=GLOB(0x15ecd4)>>> MDTM xxx.log > Net::FTP=GLOB(0x15ecd4)<<< 500 'MDTM xxx.log': command not understood. > Use of uninitialized value in concatenation (.) or string at bbb.pl line 16. これはひどい(笑) MDTMコマンドが実装されていないのだろうか。 手元でやった例だと 失敗例 Net::FTP=GLOB(0x8212d38)>>> MDTM pub Net::FTP=GLOB(0x8212d38)<<< 550 Could not get file modification time. 成功例 Net::FTP=GLOB(0x8212d38)>>> MDTM pub Net::FTP=GLOB(0x8212d38)<<< 212 20060419172149 となります。
373 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 17:45:44 ] 今ぐぐってみたら MDTMはFTPの拡張仕様だから対応してない鯖が多いみたいだ MDTM対応してない鯖は気合でLISTの結果を解析するしかなさそうな感じ
374 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 18:02:46 ] LISTのフォーマットもまちまちだから、本当に「気合」が必要だなw
375 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 18:56:34 ] 普通のftpクライアントはどうやってリスト作成しているんだろうね・・・ #暇なときにffftpのソース眺めてみよう
376 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 19:01:19 ] IEもLISTを解析してるらしい ttp://support.microsoft.com/kb/834577/ja かなり大変そうだな・・・
377 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 19:37:54 ] CPANを漁ったらこんなのがあった。使い物になるかな ttp://search.cpan.org/~gaas/libwww-perl-5.805/lib/File/Listing.pm
378 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 20:47:53 ] >>375 悲惨なものよ
379 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 00:21:38 ] ファイル交換ソフトの利用履歴を調査するソフト「Winny特別調査員」 ttp://internet.watch.impress.co.jp/cda/news/2007/01/17/14478.html >Winny特別調査員は、フォレンジック技術を応用した検査により、Winnyなどのファイル交換ソフトを利用した最終日時を調査するソフト。 これ、デモ版とはいえPerl(PAR)で書かれている珍しい製品 exeの拡張子をzipにして解凍すればソースを取り出すことが可能。 このソースを見てフォレンジック技術と"売り物"のクォリティを感じろ、おまいら
380 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 00:33:42 ] >>379 @KINTAMA_STRとかあってワロス
381 名前:361 mailto:sage [2007/01/19(金) 09:54:34 ] >>373 拡張なんですね。。 >>372->>380 $ftp->dir("./")で取得するとサーバによってこんな風になるんですよね。 表示が英語か日本語だけならまだ対応出来るんですが 日本語で去年のファイルになると時間が年表記になって 時間が取り出せないorz drwxrwxr-x 2 user group 1024 Dec 5 00:03 dir_name drwxr-xr-x 5 user group 512 3月 29日 2006年 dir_name 何か他に日付とサイズ取得できるのないかな。
382 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 10:18:31 ] >>381 > 日本語で去年のファイルになると時間が年表記になって > 時間が取り出せないorz いや、UNIXのlsコマンドの詳細表示は、半年以上過ぎるとそういう表示になる 仕様だというだけ。それを反映しているのでしょう。英語でもそうなるはず。 っていうか、そうなるのがある、か。
383 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 13:16:05 ] >>379 これぐらいの物ならPerlで作らなかった方が良かったのにね。。 コメントとテストコードが残っている事以外に関して言えば 別に酷いコードじゃないと思うけど、フォレンジック技術について言えば;; 文字連結が好きだって事は分かった。
384 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 14:01:44 ] > 別に酷いコードじゃないと思うけど、 マジで?
385 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 14:07:39 ] 112 :番組の途中ですが名無しです [sage] :2007/01/17(水) 15:23:40 ID:p3fP2iOG0 sub pf_check_p2p{ if ($_[0]=~/winny\.exe/i){add_ctime($_[0],$WINNY,"WINNY");} if ($_[0]=~/winnyp\.exe/i){add_ctime($_[0],$WINNYP,"WINNYP");} if ($_[0]=~/Share\.exe/i){add_ctime($_[0],$SHARE,"SHARE");} if ($_[0]=~/PERFECT DARK\.EXE/i){add_ctime($_[0],$PD,"PD");} if ($_[0]=~/cabos\.exe/i){add_ctime($_[0],$CABOS,"CABOS");} if ($_[0]=~/limewire\.exe/i){add_ctime($_[0],$LIMEWIRE,"LIMEWIRE");} if ($_[0]=~/BITTORRENT\.EXE/i){add_ctime($_[0],$BIT,"BIT");} if ($_[0]=~/BITCOMET\.EXE/i){add_ctime($_[0],$BIT,"BIT");} } (;^ω^) 139 :番組の途中ですが名無しです [sage] :2007/01/17(水) 15:35:19 ID:p3fP2iOG0 なんか製品版も同じな気がする… だってp2ptest.plの30行辺り見ると… my $kin="\x5b\x90\x6d\x8b\x60\x82\xc8\x82\xab\x83\x4c\x83\x93\x83\x5e\x83\x7d\x5d"; ついでにこれってShift_JISで見ると [仁義なきキンタマ] なんだよね
386 名前:383 mailto:sage [2007/01/19(金) 14:20:43 ] >>384 苦なく読めるという点で。改良点を挙げようとすればそりゃ出てくるがな。
387 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 15:04:42 ] >>385 これだけ見ても何が面白いのかワカランだろ。まぁ、十分ヘタクソなコードだけど。 これが商用のソフトのファイル共有ソフトの検出処理だってのが凄い。 72.14.253.104/search?q=cache:82TAp8C1ZsUJ:news20.2ch.net/test/read.cgi/news/1169012146/+pf_check_p2p&hl=ja&ie=UTF-8
388 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 15:15:48 ] Prefetchに気づいてる香具師が一人しかいないそのスレも大分痛い
389 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 15:37:59 ] >>388 ニュー速だぞ?w
390 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 16:29:43 ] >>379 調査員が、PC操作してる俺の隣に座って 監視するわけじゃないのか。 じゃイラネ。
391 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 16:41:48 ] 人件費が馬鹿にならんだろそれじゃ
392 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 17:08:45 ] マwジwレwwスwww
393 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 17:12:31 ] 391に突っ込むって どんだけ2ch初心者なんだよ
394 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 17:19:27 ] 2chw初w心ww者www
395 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 17:56:46 ] はいはい vipに帰りな
396 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 18:00:16 ] はwいwwはwwwいwwwww いい加減自演疲れただろうパトラッシュ
397 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 19:04:24 ] >>393 熟練の方ですか?wwww
398 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 19:05:06 ] ばばばばばばっ w w _ _ w w w ヽ(・ω・)ノ w w w .(( ノ( )ヽ )) w wwwwwwwww..............┛┗...........wwwwwwwww
399 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 20:11:44 ] 言い負けてからが長い
400 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 00:53:18 ] 2chViewer ●にログインして、過去ログをひたすら(ウェイトは挟みつつ)取得するスクリプトを書いたのですが、 ●ログインは出来るものの、肝心の過去ログが取得できません。gzip圧縮された「-ERR もう つかえません」と言うメッセージが取得されるだけです。 ●アカウントそのものは既成の専用ブラウザ(OpenJane 0.1.12.6b)で生きていることを確認しています。 コーディングの問題なのか、2chの●過去ログ取得の仕様にあっていないための不都合なのか、自分では切り分けが出来ませんでした。 ソースはこれです。 sub.jetabbs.org/upload2/upload/upz043.zip (コメント・メッセージがキモくてごめんなさい) スレ違いでしたら誘導をお願いします。
401 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 15:39:22 ] >>400 ソースは読んでいないけど、 それって、Perlの問題というより、2ちゃんねるの認証の問題だね。 専用ブラウザ以外のソフトで過去ログを取得しようとすると、拒否する ように設定していると聞いた覚えがある。 あとは、こちらのスレで聞いたほうがいいよ ↓ monazilla Part 5 pc10.2ch.net/test/read.cgi/tech/1057329161/l50
402 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 15:51:03 ] 専用ブラウザでのやりとりをキャプチャして同じリクエスト投げるようにすればいいんじゃね? 暗号化されてたらシラネ
403 名前:401 mailto:sage [2007/01/20(土) 15:51:23 ] >>400 あと、Snifferというソフトを使って、専用ブラウザが出しているIPパケットと、 自作のスクリプトが出しているIPパケットとを比べれば解決するかもしれないよ。
404 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 22:02:59 ] use threads; use threads::shared; # 終了の合図 my $kill:shared = 0; # スレッド作成 my $thread = threads->new(\&loop); 処理... $kill = 1; $thread->join; sub loop { while (!$kill) { 処理... sleep(60); } } 少し長くてすみません…。 マルチスレッドでwaitを挟みつつ処理を行い 任意のタイミングで終了させるプログラムを組んでいるのですが、 このコードだと終了用の変数をセットしてから処理が戻るまで60秒もかかってしまいます。 何かいい方法はないでしょうか よろしくお願いします。
405 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 22:24:10 ] >>400 UAをMonazilla/1.00にするとか
406 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 22:47:00 ] >>404 threads::sharedにcond_ナントカというのがいくつかあるので よく説明読め。たぶんお前が求めているものはそれだ。
407 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 22:55:23 ] >>406 ありがとうございます 調べてみます
408 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 23:33:03 ] Perl Hacks ttp://www.amazon.co.jp/dp/4873113148/ これ今日発売だけど買った奴居る? 中身どうですか?
409 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 23:57:59 ] そんな本が出るこそさえ知らなかったわさ
410 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 00:14:29 ] >>406 cond_timedwait cond_signal を併用する事でできました 昨日からずっと悩んでいたので助かりました ありがとうございました
411 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 00:19:55 ] >408 O'Reillyで目次見れるから、だいたい判断つくんじゃない? 俺は英語版持ってるから買わないけど。 ttp://www.oreilly.co.jp/books/9784873113142/toc.html
412 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 00:54:41 ] 第1章の1項ってテクニック?
413 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 01:23:23 ] 1章2章はツールの話だろ
414 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 01:24:15 ] 「firefoxから簡単にCPAN検索できるようにする」だからテクニックといえばテクニックだろ。 俺はsleipnirもfirefoxもCPAN検索できるようにしてある。 あとはローカルにppmリポジトリを立てればすごく便利。
415 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 05:57:20 ] >>408 買った買った。ペラペラとめくってからほぼ衝動買い。 お前も買え。
416 名前:デフォルトの名無しさん [2007/01/21(日) 12:10:31 ] すみません @week = ("Sun","Mon","Tue","Wed","Thr","Fri","Sat"); $i = 0; for($i=0; $i <= 7; $i++){ print $week[${i}]; } このソースで-wオプション付けて実行すると Use of uninitialized value in print at ./hairetu.pl line 7. と警告が出るのですが何故でしょうか? 見たところ変数はきちんと初期化していると思うのです。
417 名前:デフォルトの名無しさん [2007/01/21(日) 12:12:55 ] わかりました 7じゃなくて6ですた… 自己解決染ました
418 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 12:41:03 ] >>417 > 7じゃなくて6ですた… 植木算のミスといいます。そして Perl では「必要がなければ添え字を扱わない」ことで、このリスクを回避できます。 foreach my $wday (@week) { print $wday; } あるいは、 print for @week;
419 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 13:30:56 ] すごい省略できるんですね…
420 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 16:25:18 ] Perlの省略記法は、芸術ですから。 いろいろ言われるところもあるけど、ラリー・ウォール先生もPGは傲慢であれとおっしゃっていることだし。 うん。大丈夫。半年前に書いたスクリプトがさっぱり分からなくても大丈夫。泣くことなんて無いよ。
421 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 16:39:35 ] > foreach my $wday (@week) { > print $wday; > } "my" なんて入れる必要ないだろ
422 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 16:45:32 ] PBP6.9に入れた方がいいと書いてあるだろ
423 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 18:36:44 ] 自分のフォルダのtextファイル(1000行〜1500行)を ひとつの変数に入れる方法を教えてください open(IN,"< foo.txt"); foreach(IN){ ・・・ } のように一行づつ処理ではなく、全部の行をまとめて処理したいのです。 (正規表現で複数の行に渡って処理したいため) 何かいい方法はないでしょうか? よろしくお願いします
424 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 18:40:53 ] read関数
425 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 18:47:46 ] my $txt = join('', (<IN>)[999 .. 1499]);
426 名前:423 mailto:sage [2007/01/21(日) 18:49:16 ] >>424 >>425 ありがとうございます。 無事解決できました
427 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 19:00:13 ] いいのかおい
428 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 23:22:29 ] 正規表現の量指定子{}に変数は使えますか?
429 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 23:25:53 ] すいません、自己解決しました てか自分で試せばよかった・・・
430 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 17:27:38 ] すみません。 教えてください。 my @aaa = () ; my @bbb = () ; for(my $i=0;$i<5;$i++) { @aaa = ($i,$i+1) ; @bbb = (@bbb,\@aaa) ; } foreach(@bbb){ print "$_\n" ; } foreach(@bbb){ foreach(@$_){ print "$_\n" ; } } 上を実行すると下の結果になります。 ARRAY(0x13c93c) ARRAY(0x13c93c) ARRAY(0x13c93c) ARRAY(0x13c93c) ARRAY(0x13c93c) 4 5 4 5 4 5 4 5 4 5 >>↓に続く
431 名前:430 mailto:sage [2007/01/23(火) 17:28:11 ] >>↑の続き 出力させたい結果は以下なのですがどうも リファレンスの中がARRAY(0x13c93c)で全て同じになってしまっているようです。 (同じ@aaaという配列名をリファレンスしているせい?) ループさせてリファレンスを増やしていきたいのですが どのようにしたら下記のような出力結果に出来ますでしょうか。 0 1 1 2 2 3 3 4 4 5