[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 09:49 / Filesize : 220 KB / Number-of Response : 791
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlについての質問箱 29箱目



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

313 名前:299 mailto:sage [2007/01/14(日) 20:42:44 ]
やっぱりPVIVになった。どうやら >>299 に書いた記憶通りだったみたい。

use Devel::Peek;
$foo = '2000';
Dump $foo;
$foo += 1;
Dump $foo;

SV = PV(0x1801660) at 0x180b5a8
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0x300c70 "2000"¥0
CUR = 4
LEN = 5
SV = PVIV(0x1801a20) at 0x180b5a8
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 2001
PV = 0x300c70 "2000"¥0
CUR = 4
LEN = 5

この状態でFLAGSをC側からいじると、
文字列として表示した時と、数値として使った時で別の値を出すスカラ
とか作れちゃうんだよね。

314 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 22:35:50 ]
>>313
実はoverloadがあればxsを使わずともそういうのが作れちゃったりするのですよ。
ttp://search.cpan.org/~dconway/Contextual-Return-v0.1.0/lib/Contextual/Return.pm
use Contextual::Return;

$contextual = NUM { 10 } STR { 'abc' };
print $contextual . '';
print $contextual + 0;

315 名前:314 mailto:sage [2007/01/14(日) 22:43:39 ]
ああ、失敗。よく考えたら流石に代入は無理だな。…Tie使ったら或いは出来たりしそうな気もしないでもない。
313はスカラを作ると言うことで代入した別の値を保持まで出来たりするのかな

316 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 23:55:02 ]
Scalar::Utils の dualvar は?

317 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 23:56:11 ]
ごめん、Scalar::Util だった。
ttp://search.cpan.org/~gbarr/Scalar-List-Utils-1.19/lib/Scalar/Util.pm

318 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 23:59:37 ]
>実はoverloadがあればxsを使わずともそういうのが作れちゃったりするのですよ。
スルーしてた。xs を使って実現したのが Scalar::Util の dualvar ってことっすね。

319 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 00:09:24 ]
dualvar でスカラ作ってみたけど、
作った後で代入し直したら、片方だけ(数値だけ or 文字列だけ)になっちゃった。

ということは、xsでフラグいじって IOK, POK 両方立てても
代入したら片方になっちゃうということか。
オブジェクトにして代入まで見張れば良いんだろうけど。

320 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 01:57:29 ]
webサーバをan httpdからapacheに変更したところ文字化けする部分が出てきました。
method=getで受けとった部分が文字化けしてしまいます。method=postは大丈夫でした。
よろしくお願いします。
↓の一番下の部分も参考にしましたが直りませんでした。
tech.bayashi.net/pdmemo/chara2.html
apache perlは↓のサイトを参考に構築してあります。
www.y-kit.jp/saba/
------------------------------
環境
Apache/2.0.59 (Win32) PHP/5.1.4
------------------------------
コード例
require './jcode.pl';
#GET用
$myindata=$ENV{'QUERY_STRING'};
#POST用
#read( STDIN, $myindata, $ENV{ 'CONTENT_LENGTH' } );
#$myindata =~ tr/+/ /;
#$myindata =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;
&jcode'convert( *value, 'sjis' );
print "Content-type: text/html\n\n";
print $myindata;
------------------------------
getデータ
localhost/bbsmt/write.cgi?name=a&mail=&message=あいうえお&a=11
表示データ
name=a&mail=&message=???¢???|?¨&ip=&a=11

321 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 02:03:07 ]
>1に全てが隠されているんじゃないだろうか。



322 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 12:39:35 ]
以前使っていたサーバでdbmファイルを使っていたのですが、
そのまま別のサーバに移動したら読み込めなくなりました。
dbmファイルは.dirと.pagの2つじゃない方(1つのファイル)です。
古いサーバはもう使えません。新しいサーバでdbmファイル
を読む方法はないでしょうか…。

323 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 14:43:05 ]
>>322
質問する時はまず環境を説明しろ!
(古い方と新しい方それぞれのOSの種類とバージョン,Perlのバージョン)

あと、読めなくなったってのはどんなエラーメッセージが来てるのかも報告汁

324 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 19:18:22 ]
>>322
ヒントになるかわからんが
NDBM_File
DB_File
GDBM_File
SDBM_File
ODBM_File

325 名前:320 mailto:sage [2007/01/15(月) 20:46:35 ]
別のとこで質問してきます。

326 名前:322 mailto:sage [2007/01/15(月) 20:58:26 ]
読めなかったと思ったら読めました。お騒がせしました。
dbmファイルはテキストなどに書き出しておかないとバイナリでサーバを移しても
読めないのだと思っていました。dbmopen()で読み書きしていたので、どの
形式のDBMかわからなかったのです。

327 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 05:56:00 ]
perlerのエロイ人教えて!ワッフルワッフル

指定されたディレクトリのディレクトリハンドルを開いて
ディレクトリ内のファイル名を取得するスクリプトを書いたのですが
名前が長いファイルがあるとそのファイルと、それ以降のエントリが
ディレクトリハンドルから取得できないんだけど
なんで?これどうすれば回避できる?

環境: Windows XP + ActivePerl5.8.8 build819


328 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 07:04:48 ]
esperのエロイ人が来て
お前の書いたスクリプトを透視した上で回答してくれるのを待つことだ

329 名前:327 mailto:sage [2007/01/16(火) 10:55:47 ]
>>328
再現スクリプトを下記に示します。
DirHandle以外にopendirでディレクトリハンドル開いたり、
globを使ってみたけど結果はおんなじでした。

----
#!/usr/local/bin/perl
use strict;
use utf8;
use warnings;
use FindBin;
use DirHandle;
use Data::Dumper;
my $dh = DirHandle->new($FindBin::Bin) or die $!;
my @entries = $dh->read;
print Dumper(\@entries);

__END__
----

330 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 10:58:29 ]
名前が長いファイルの例は何ですか?

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章はツールの話だろ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<220KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef