[表示 : 全て 最新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

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

432 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 17:40:06 ]
レキシカルスコープ

433 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 17:41:40 ]
>>430-431
ループのなかでmyするようにする。
my @aaa = ($i,$i+1) ;

若しくは無名配列のコンストラクタを使う。
@bbb = (@bbb,[@aaa]) ;

ループの外では@aaaを使っていないのだから、
スコープをループ内に縛る前者をお勧めする。

434 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 17:48:50 ]
質問です。

テキストファイルから顔文字を除去しようと考えていますが、いい方法がみつかりません。
正規表現でうまく除去する方法というのはないでしょうか?


現在考えていますのが、括弧の中に記号あると顔文字であると判断するとしています(例=(゜Д゜) (ノ∀`*) など。
この正規表現を書く場合全ての記号を書かないといけないでしょうか?

質問が2つとなりましたが、よろしくお願いします

435 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 17:52:37 ]
>>434
まず正規表現を勉強しろ。

顔文字のリスト作ってそれと比較するのが単純で速いと思うが。

436 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 17:55:52 ]
(゜o゜)これはおk?
(TへT)これもおkだね

437 名前:434 mailto:sage [2007/01/23(火) 17:57:28 ]
>>435
リスト作ったほうが早いですか。

その場合、リストにない顔文字は一致しませんけど、しょうがないか…
全部の顔文字をうまく除去するなんて、難しいですよね

438 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 18:01:19 ]
上手く作ったとしても
 テンプレート・ツールキット(TT)
なんて文脈じゃ誤判定は避けられないな

439 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 18:04:54 ]
>>437
"ヽ(`Д´)ノ"
とかが、"ヽノ"になってもいいのかってこったわな。
結局は、顔文字の辞書ファイルを保守するしかないだろ。




440 名前:434 mailto:sage [2007/01/23(火) 18:18:05 ]
"ヽ(`Д´)ノ"の場合は前後が記号ならそれも弾くとか考えてたんですよね

まぁ、ノのほうが記号じゃないんで、残りますが。

顔文字の辞書作ってるけど。結構メンドクセ

441 名前:430 mailto:sage [2007/01/23(火) 18:21:54 ]
>>433
解決しました。
ありがとうございました。

>>432
こういうのをレキシカルスコープって言うんですね。
ありがとうございます。

442 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 01:40:36 ]
文字の置換の際に、「マッチした文字列になんらかの処理をする」ということは可能でしょうか?

$str = "ABCDEF";
$str =~ s/(B)/&conv($1)/;

のように、マッチした文字列を、関数を使って、返り値で置換したいのですが・・・
(ちなみの、このコードだと、
A&conv(B)CDEF
という文字列になってしまいました。。。)

443 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 02:25:10 ]
e

444 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 04:16:24 ]
v

445 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 06:30:30 ]
>>442
Windowsならコマンドプロンプト開いて
perldoc perlre
でperlの正規表現のドキュメント読めるよ。
ドキュメントにざっと目を通してれば人に質問するような内容じゃないぞ。

446 名前:4442 mailto:sage [2007/01/24(水) 07:16:24 ]
>443
>445
ありがとうございます。 /e で、できました。

ドキュメントを確認せずに質問してしまって
済みませんでした。
プログラミングPerlにも、 /e が載ってました・・・

447 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 14:10:56 ]
CGI作るつもりでperl始めたんだけど、テンプレにあるようなCGIとは無関係な使い方ってどんな使い方するの?
例えばどんな仕事でどう使うとか教えてほしい

448 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 14:14:36 ]
>>447
スクリプトとして使えるじゃん。 バッチ処理とかさ。

449 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 14:26:58 ]
>>447
CGIと関係なく、データベースとのやりとりとか。



450 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 14:27:35 ]
>>447
えーと、えーと

451 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 14:29:52 ]
こんな質問するやつに教えても理解できないと思うよ

452 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 14:31:22 ]
エロ画像エロ動画収集に決まってるだろ

453 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 14:32:40 ]
分類したエロ画像ファイルをリネームする

454 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 15:02:24 ]
CUIだから単純で且つ面倒くさい処理やらせてる。すぐ書けるしね
>>452
漏れ以外にPerlをエロ収集に使おうと考える奴がいるとは・・・

455 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 16:01:07 ]
>452-454
あれ、俺が何人もいる…

456 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 17:03:32 ]
たしかにエロ収集に便利、というよりエロ収集してる時が一番はかどるな。

457 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 17:06:36 ]
組みたくなってきた・・・
エロパワーは絶大だな

458 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 17:31:07 ]
 ▀▄    ▀▄      ▄█    ▄█  ▀▀▀▀█
   ▀▄    ▀▄   ▄▀█   ▄▀█     ▄▀
    ▄▀    ▄▀ ▄▀ █  ▄▀ █     █
  ▄▀    ▄▀   ▀▀▀█▀ ▀▀▀█▀   █
 ▀     ▀        ▀     ▀    ▀

   █ ▄▄▄   █    ▀▀▀▀    ▄      ▄█ █
  █  █▄▄ █ █  ▄▄▄▄▄▄▄   █  ▄▄▄▄█▄▄
 ▀█ ▄█ █ █ █      ▄▀    █      █
  █ ▀ █▀ █ █    ▄▀▀▄    █   ▄▄▄█
  █  ▄▀    █  ▄▀   █    █  █   █▀▄
  ▀  ▀    ▀▀ ▀      ▀▀▀ ▀   ▀▀▀

こんなスレアラシに使える。

459 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 18:27:19 ]
正規表現が使いやすいからPerlで組んだ
でもCUIなのがなぁ



460 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 18:34:47 ]
Perlでは、ワンライナーか数行程度のスクリプトでテキストをいじったりとか
しかしてないが
Unicode対応がボミョウなので、たまに困ったことになる

use encoding('cp932')とかって、-n/-pスイッチとかと一緒に使うと
うまく動かなくね?つか、これって基本的に非推奨なんだべ?

Unicode文字列のリテラルや正規表現を直接記述できないので、
use encoding()しないとなると途端にウザい事態になるわPerlは

461 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 18:39:55 ]
スクリプトをutf8で書けばuse encodingいらないし特に問題ないけどね。


462 名前:460 mailto:sage [2007/01/24(水) 18:43:07 ]
>>461
それはスクリプトも入力もUTF-8を仮定できるときだけだべ?
少なくともWindows環境でそれは仮定できないなぁ
UTF-8なファイル名でファイル開いたりできないし

463 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 19:11:42 ]
>>115

464 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 21:44:41 ]
>462
ttp://aspn.activestate.com/ASPN/Mail/Message/2996684

465 名前:460 mailto:sage [2007/01/24(水) 23:34:35 ]
>>463
-pスイッチや-nスイッチを使わない場合はそれで上手く行くようです。
そもそも毎度毎度こんなに長いのではワンライナーは書けませんし、
簡単な仕事を簡単にやっつけられないのなら、Perlとしての魅力は
激減ですが。

やっつけ仕事によく使う-pスイッチや-nスイッチと
use utf8を共存させる方法はありますか。
#!/usr/bin/perl -pi.bak
なスクリプトで>>115の方法を試すと全くおかしなことになります。

>>464
なるほど、便利なモジュールがあるのですね。

466 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 00:31:18 ]
間違いなく合ってない。
煽りとかではなく。
別の言語にしたほうが幸せになれるとおもうよ。

467 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 01:21:17 ]
Perl/Tk で GUI でエロ画像を集めてるよ。

468 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 02:46:48 ]
エロのエネルギーはおよそ12kW/hです。

469 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 09:55:07 ]
質問
use strict; warn $c;
だとstrictが効くのに
use strict; warn $a;
だとstrictが効かないのはなぜ?
$bも効かない



470 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 10:04:09 ]
sort() で使われるから例外扱い
perlvar嫁

471 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 10:16:32 ]
質問します。

for(my $i=0;$i<=$#aaa;$i++){
$out = $aaa[$i] ;
if( $aaa[$i+1] ){
while($aaa[$i+1] =~ /^\+/){
$i++ ;
$out = "$out $aaa[$i]" ;
}
}
print "$out\n" ;
}

これのforをforeachで書いたらどんな記述でかけますでしょうか。
やりたいことは、ある要素のアタマに"+"があれば
その要素は一つ前の要素とつなげようとしています。
foreachで回している最中に強制的に次の要素にアクセスすることは出来るのでしょうか。

472 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 10:18:14 ]
from>>469 to>>470

perldoc perlvar
$a
$b Special package variables when using sort(), see "sort" in perlfunc. Because of this specialness $a and $b don’t need to
be declared (using use vars, or our()) even when using the "strict ’vars’" pragma. Don’t lexicalize them with "my $a" or
"my $b" if you want to be able to use them in the sort() comparison block or function.

thx!


473 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 10:27:06 ]
>>foreachで回している最中に強制的に次の要素にアクセスすることは出来るのでしょうか。

foreachでは今アクセスしている要素が何番目かを知ることはできない。
もちろん、中で別に変数を$i++とかすりゃ別。

俺ならこんな感じに書く。

foreach (@aaa) {
if (/^\+/) {
$out[-1] .= " $_";
} else {
push @out, $_;
}
}


474 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 10:34:48 ]
すまん、なぜかソラ目でprintがpushに見えていた。

printだとこうかな。printが2つあるのがいまいち気に入らないが...

my $buf = undef;
foreach (@aaa) {
if (/^\+/) {
$buf .= " $_";
} else {
print $buf, "\n" if defined $buf;
$buf = $_;
}
}
print $buf, "\n" if defined $buf;

475 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 10:38:17 ]
>>473 の後
print map { "$_\n" } @out; でもすりゃいいんだから別にいいんじゃ

476 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 15:20:56 ]
print "$_\n" for @out;
このほうが短い。

477 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 15:30:03 ]
print join "\n", @out;
の方がわかり安い

478 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 15:49:57 ]
どれが速いんですかね^^

479 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 16:05:03 ]
>>477
ダウト。それだと最後の要素の後に改行が出ない。



480 名前:471 mailto:sage [2007/01/25(木) 16:31:27 ]
>>473
できました!!
すっきりしてわかりやすくなりました。
ありがとうございます。

481 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 16:40:25 ]
>>479
そういう細かい部分ってすっごい大事だよね
後で泣き見たりする
しかし「ダウト」って使う人はあんまり見たことが無い

482 名前:デフォルトの名無しさん [2007/01/25(木) 18:24:14 ]
クイズのゲームを作っているのですが、問題を回答したら次ってどんどん進んでいき
正解したら各問ごとに正解数をカウントしていってりうのですちゃんとカウントされません。

perlはテキストでも作ってそれに書き込んでそのあと読み込んでしないと記憶した
変数が消えるのですか・・・?
変な質問ですみません。HSPからperlに乗り換えてみたんですが混乱してしまって

483 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 18:28:08 ]
>>482
日本語でおk
HSPで作ったほうがいいんじゃね?

484 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 18:30:01 ]
>>483
perlの勉強をしてみたいと思いましたので・・・

myで定義をしてるんですけど、なんかいろいろと定義の仕方があるみたいですねperlは

485 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 18:32:17 ]
さっさとソースを見せろ

486 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 18:45:37 ]
if($tugi eq "Q1"){
if($toi eq "t"){
$sum=$seikai+1;
}
&mon0;
}
if($tugi eq "Q2"){
if($toi eq "t"){
$sum=$seikai+1;
}
&mon1;
}
if($tugi eq "Q3"){
if($toi eq "t"){
$sum=$seikai+1;
}
&goukei;
}

sub goukei{
print "正解は"+$sum+"個";
}


487 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 18:45:40 ]
次の問題へ進むたびに正解数を my してるんだろうな

488 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 18:47:08 ]

sub mon0{
print "<P>";
print "<SELECT name='answer' size='3'>";
print "<OPTION value='true'>みかん</OPTION>";
print "<OPTION value='false'>アップル</OPTION>";
print "<OPTION value='false'>ばなな</OPTION>";
print "</SELECT>";
print "</P>";
print "<INPUT type=hidden name=tugi value=Q2>";
print "<P><INPUT type='submit' value='次の問いへ'></P>";
}
sub mon0{
print "<P>";
print "<SELECT name='answer' size='3'>";
print "<OPTION value='false'>インコ</OPTION>";
print "<OPTION value='true'>ふくろう</OPTION>";
print "<OPTION value='false'>鳩</OPTION>";
print "</SELECT>";
print "</P>";
print "<INPUT type=hidden name=tugi value=Q3>";
print "<P><INPUT type='submit' value='次の問いへ'></P>";
}

こんな感じです

489 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 18:48:04 ]
webprogでやれ



490 名前:487 mailto:sage [2007/01/25(木) 18:49:27 ]
はずした。

> $sum=$seikai+1;

491 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 18:49:59 ]
$sum=$sum+1
じゃないの?

492 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 18:53:22 ]
>>491
そこは修正しました。
上のほうで
my $sum;
と定義してるのが問題なんでしょうか?

493 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 18:57:38 ]
上のほうで、とか言われてもわからないから全部見せろ

494 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 18:58:39 ]
そもそもCUIなのかCGIなのか

495 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 18:59:02 ]
↓こっちのがいいんでね?
pc10.2ch.net/test/read.cgi/php/1164519503/

496 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 19:08:30 ]
ttp://www.vipper.net/vip166431.zip.html
ここに書き込むと長いのでアップしてきました

497 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 19:19:26 ]
htmlなんだろw

498 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 19:22:30 ]
板違いっぽいですね(−−

499 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 05:44:42 ]
>>477 は最後の改行もそうだが、メモリ内で一旦展開するから、
効率よくないんでない?




500 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 07:40:35 ]
さらに、文字列を連結するためにメモリの再割り当てが何度も起きる悪寒

501 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 11:44:01 ]
UTF8 で並んでいる名前の一覧があるのですが、それをあいうえお別に分類したいのですが
どういう方法が良いでしょうか。

青木 -> @AGyou へ
斉藤 -> @SaGyou へ
という感じにしたいとおもいます。

502 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 12:04:33 ]
読み仮名付けなきゃ無理だね

503 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 12:07:36 ]
>>502
お返事ありがとうございます。やっぱり難しいですね orz
別の手段を考えて見ます。

504 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 12:10:01 ]
>>503
> 別の手段を考えて見ます。

なんで? 読みがなつければいいじゃん。


505 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 12:13:15 ]
>>504
表現が悪くてすいません。別の手段 → 読み仮名をつけることです。

506 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 12:32:13 ]
読みがなをつけるモジュールって、あっても良さそうなもんだけどね。
mecabにぶっ込めば一発か?

507 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 12:35:47 ]
>>506
あ〜それ欲しいですね。

508 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 13:24:24 ]
不確実すぎるだろ・・・

509 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 14:09:40 ]
すべて登録されているとは限らないし ――特に名前の方、
読みがアンビなのもあるから、必要なのは、読みがなふり支援ツール
じゃなかんべか。



510 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 15:48:49 ]
漢字にふり仮名を自動でつけるのは
ある程度は自動化できるが
同じ字で読みが違う場合もあるので(ex.徳沢 => とくさわ,とくざわ etc.)
完全な精度では無理。

511 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 18:19:13 ]
www.alles.or.jp/~tsuyama/name.htm
684万人を調べて、約7万8千種の名字ランキングを公開している人がいるぞ。
そのデータを使うのが手っ取り早いと思われる。
....しかし、ヒマ人だな〜。


512 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 19:17:30 ]
読みを当てはめるのも結局確率だから
↑のデータ使ってもやっぱ無理っしょ

513 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 20:45:14 ]
そこでAIの出番なわけだ

514 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 20:52:49 ]
そこでエスパーの出番なわけだ

515 名前:デフォルトの名無しさん [2007/01/26(金) 20:57:04 ]
WindowsXP上でActivePerlを使ってるんですが、USBデバイスをコントロールする方法はありますか?
学習リモコンのクロッサム2+USBとデータをやりとりしたいんですが。

516 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 21:07:32 ]
>>511のリンク先より引用
----
名字 ふりがな 人数 順位 累積人数  累積比率
鈴木 スズキ 139,627 1  139,627 2.04029%
鈴木 ススギ 25 13,107 6,517,718 95.2398%
鈴木 ススキ 7 27,840 6,723,557 98.2476%
鈴木 スズノキ 3 41,426 6,795,040 99.2922%
鈴木 スズ 2 47,333 6,812,494 99.5472%
鈴木 スズシ 2 47,333 6,812,506 99.5474%
鈴木 スヅキ 2 47,333 6,812,518 99.5476%
鈴木 スス 1 56,150 6,832,142 99.8343%
鈴木 ススヘキ 1 56,150 6,832,147 99.8344%
鈴木 ススリキ 1 56,150 6,832,148 99.8344%
鈴木 スズギ 1 56,150 6,832,151 99.8344%
鈴木 ズスキ 1 56,150 6,832,308 99.8367%
鈴木 ズズキ 1 56,150 6,832,309 99.8367%
鈴木 ヌズキ 1 56,150 6,836,957 99.9047%
----

姓しかわからない状況で確実に読み仮名をつける方法は
>>513のAIじゃなく >>514のエスパーだな。
AIについて無知な>>513はAIと書けばかっこいいと思ってるのか?

517 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 21:11:14 ]
ヌズキはねーよw どう考えても書き間違いだろwww

あ、ヌズキさん見てたらごめんなさい><

518 名前:ヌズキ mailto:sage [2007/01/26(金) 21:24:52 ]
呼んだ?

519 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 21:26:36 ]
名前の仮名振りは、人間がやってもかなり難しい。
自動化なんてとても無理。 入力補助が限界でしょうね。



520 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 21:50:28 ]
あと「ズスギ」さんと「ズズギ」さんが入れば
濁点のあるなしの組み合わせがそろうのにな

521 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 22:00:02 ]
読みが存在しない漢字が存在する

522 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 00:46:22 ]
たとえば、「東」と書いて「あずま」「ひがし」「とう」と、読み方がいろいろある。
漢字だけからは読み方は判別できない。
そのため、正しい読み方は、本人にしかわからない。

523 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 00:52:27 ]
同じクラスに五島(ごとう)と五島(ごしま)が居たことあるよ。

524 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 01:09:35 ]
>>523
おまえ、ひょっとして1年2組の時の近藤(こんどう)か?
おれ隣のクラスの権藤(ごんどう)だよ。おぼえてるか?

525 名前: ◆TWARamEjuA mailto:sage [2007/01/27(土) 01:37:47 BE:4356285-BRZ(6761)]
住基ネットワークに問い合わせれば総て解決♪

526 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 15:01:28 ]
>>515
キミの質問は、2つに切り分けないといけない。
1.クロッサム2のDLLのインターフェースが公開されているかどうか。
2.ActivePerl から DLLを呼び出せるかどうか。

両方とも「YES」だからできるのだが、質問の切り分けができず、
「1」の当否を回答者に調べさせるキミには無理だ。

527 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 15:20:23 ]
>>525
スーパーハッカーキタ━━━━━━(゚∀゚)━━━━━━ !!

528 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 16:01:58 ]
あふぉか
姓しかわからないデータと住基ネットのデータをどうリンクするんだよ。
>>525=>>527か?
くだらないネタにみんなスルーしてるわけだが、
自作自演するほど反応してほしかったのか?


529 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 16:22:13 ]
ネタだと思っているなら何故あふぉとか言ってマジ突っ込みするんだろう。分裂気味?
まぁ大方、真相がネタでもマジでも恥かかないよう工夫したら前後で矛盾が出たってとこか。



530 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 17:17:34 ]
まぁ未承諾さんだし。

531 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 18:02:01 ]
>>526
もちろんDLLとかWindowsの約束とかよく分かっておりません。
そのあと、mrccom.dllを見つけてWin32::APIでimportを試すところまで来ましたが、
unknown errorでimport出来ず\(^o^)/。どなたか気が向いたら教えてください。

532 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 20:09:12 ]
>>528
サブイ

533 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 22:26:03 ]
>>527,>>529,>>532
ここはvipでも口論・議論ではなくperlの質問箱スレだ。
前日の終わったネタをいつまでも引きずったり、
指摘されて逆切れして粘着するぐらいならほかのスレ行けよ


534 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 22:45:22 ]
>>528=533 別に君以外誰も文句も言ってないし、しきりも頼んでないけど。
頓珍漢レスを>>529に指摘されて逆ギレしてる張本人乙にしかみえないよ?w

535 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 22:52:37 ]
粘着だが逆ギレだか知らんが、
PerlのスレでPerlの話をしないやつはすべて平等に価値がない

536 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 23:29:55 ]
ここは批判されると30分以内に逆切れコメントする527を観察スレですか?

537 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 00:35:56 ]
>>531
>どなたか気が向いたら教えてください。
まず、C++を勉強しろ。C++でDLLを扱えるようになること。
PerlでDLLを扱う話はそれからだ。

538 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 01:35:42 ]
>>533
ここはvipでも口論・議論ではなくperlの質問箱スレだ。
前日の終わったネタをいつまでも引きずったり、
指摘されて逆切れして粘着するぐらいならほかのスレ行けよ

539 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 02:58:29 ]
    __
    |   |
    |   |   ___                  ___
    |   | .  /     |  __    _____   / _  \
    |   |  /  /|  |  /  /   / ____/  / /  >  l
    |   |. /  / .|  |. /  /   / /..   _    /   ̄  /
    |   |/  /  |  |/  /   /   ̄ ̄_/   /      \
    |       /.   |     /   / / ̄ ̄ __   /  / ̄ ̄>  |
    |    /   |___/  ./   ̄ ̄ ̄ /  /    ̄ ̄  /
     ̄ ̄ ̄             ̄ ̄ ̄ ̄ ̄     ̄ ̄ ̄ ̄ ̄     _____      ___ ___    ___
    ______                             /__  __/ [][] _| |_| |__ _| |_
     |  ___  \                               / /     |    _  | |_  レ'~ ̄|
     |  |    \  l                              |  |_      ̄|  | / / /   /| |
     |  |____/  /                             \__|      |  |  ̄ /_  /.  | |_
     |  ____/ ___  __    __/ヽ                    |_|.     |__|.   \/
     |  |     /`、_/_/ / _ ヽ  / _  /
     |  |     ヽ  /   | l   l l  | l   l l
     |  |       | l     ヽ  ̄ /  ,ヽ  ̄ /
      ̄          ̄      ̄ ̄  / __ ヽ
                        | l     l l
                        ヽ  ̄ ̄ /
                         ~ ̄ ̄~



540 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 03:41:10 ]
それ、もう少し小さくならんか。

541 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 04:14:20 ]
  Web
      でやれ
  Prog

542 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 04:16:24 ]
vv3bpr0gマ”ゃれ

543 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 21:16:33 ]
Image::Magickで32bit(RGBA)のpngを読み込んで、24bit(RGB)のpngに書き出したいんだけど、
どうやればいいか教えてください。

544 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 21:39:34 ]
mechanics.civil.tohoku.ac.jp/soft/node43.html
convertで24bit Raw RGBで出力して
それを再度pngで出力すればいいんでね?

545 名前:543 mailto:sage [2007/01/29(月) 00:12:46 ]
もう少し調べてみたら、
$im->Set(matte => 0);
で解決できました。スレ汚しごめんなさい。

546 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 20:26:33 ]
threads::shared なんですが、
例) $var : shared;
と言うのは、文法的にどういう意味なのでしょうか?
threadsだけに許された特殊な文法なのでしょうか?

547 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 21:18:54 ]
attributes

548 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 22:02:55 ]
>>547
ありがとうございます
CPANで見ても英語がさっぱりで…
分かり易く解説されているページ等はないでしょうか
はてなのは見ましたがさっぱりです

549 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 17:01:01 ]
質問です
UNIX系OSやWindowsで
.soや.dllを利用したいのですが、
どうするのが一般的でしょうか?
出来れば日本語の解説ページをお願いします



550 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 23:53:20 ]
質問です
コマンドラインでカウントダウンってできますか?

C:\>perl hoge.pl
次の処理まで待ち時間: 5秒...

のところ “5”の部分のみが 4 3 2 1... と更新されていくようにしたいのです
いちおー system "cls (もしくは) clear "でスクリーンごと更新とかは なしで

Activeperlですが cpanで解決するなら cpanでも結構です

よろしく〜

551 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 00:00:31 ]
>>550
¥b


552 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 00:05:34 ]
>551
うおっ! ありがとうございます!!
さっそくそのキーワードで調べてみます!!

553 名前:デフォルトの名無しさん [2007/02/02(金) 13:47:58 ]
perlでISHテキスト←→バイナリ変換するモジュールってある?
一通りCPANしたりぐぐったりしてみたが見つからなかったんだけど。

554 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 15:02:25 ]
質問です。
項目数(列数)が多いCSVのデータを読み込んで処理するとき、皆さんはどうしてますか?

私は10項目くらいでしたら
my($id, $name, $age, ..) = split /,/;
と、それぞれ変数を用意するのですが、

100項目を超えるような場合、項目名を要素とする配列を用意しておき
@col_name = qw(id name age ..);

連想配列に格納して
my @array = split /,/;
my %hash = ();
for(0..$#col_name) {
  my $key = $col_name[$_];
  my $val = $array[$_];
  $hash{ $key } = $val;
}
$tel = $hash{tel};

今扱ってるCSVはデータの件数(行数)が500件あって、上記の連想配列の格納をその件数分繰り返し行なっています。



555 名前:554 mailto:sage [2007/02/02(金) 15:03:04 ]
「項目名 => 項目番号」の連想配列を用意しておくのがいいのかなとも思うのですが、
%col_no = (
  id => 0,
  name => 1,
  ...,
  );
$tel = $array[ $col_no{tel} ];
↑ちょっと読みづらいかなとも思います。

項目数・項目名が変わる可能性は低いです。
効率よりも読みやすさ重視です。

よろしければ、ご意見お聞かせください。


556 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 15:07:30 ]
$tel = $array->[$i]->{'col_no'}->{'tel'};

557 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 15:09:34 ]
$tel = $array->[$i]->{'tel'};
これでいいのか
入れ方は任せる

558 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 18:22:13 ]
@col_name = qw(id name age); # member

$_ = "1,hiroyuki,30"; # csv
@$record{@col_name} = split /,/;


#
print $$record{id},"\n";
print $$record{name},"\n";
print $$record{age},"\n";

559 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 21:32:19 ]
利便性の為にハッシュを使わざるを得ないのが気になってるんじゃないの?
配列でやりたいなら、こんなことしちゃったり:

my $r = MyRecord->new(split /,/);
print("$r->name\n");

package MyRecord;
BEGIN {
my $i = 0;
my @col_name = qw(id name age); # カラム名を設定。
for my $n (@col_name) {
eval qq{ sub $n :lvalue { \$_[0][$i] }};
$i++; }}

sub new { bless [@_[1..$#_]], $_[0]; }



560 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 21:34:18 ]
ミス。
print("$r->name\n")
修正 → print($r->name, "\n")

561 名前:デフォルトの名無しさん [2007/02/02(金) 22:02:33 ]
>>559
evalで作るのと、*{...} = sub{}で作るのどっちがスマートなんだろ。

562 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 22:22:43 ]
evalはパーサが動く分遅くはなりそうだけど
通常の定義と見た目が一貫してるから読みやすいかも。

シンボルテーブル+クロージャだと、クロージャ作る側のレキシカルな環境?も意識しないとならないし、ちょっと嫌。

563 名前:554 mailto:sage [2007/02/03(土) 10:09:16 ]
>>556-562
ご回答ありがとうございます。

いろいろ方法があるのですね。
まだご回答の内容が理解できていないので、勉強してきます。

564 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 09:24:15 ]
他人が作った、FTPで複数のファイルを受信する為の処理に手を入れなくては
いけないのですが、元のソースにエラー時の処理が全く入っていません。

$ftpcmd = ○○○ #<-ftpコマンドが記述されたテキストファイル
system("ftp -n < $ftpcmd);

対象ファイルは複数あって mget logfile*.* で取って来ています。
ファイルが取って来れなかったり、相手に接続できなかったりといったような
エラーが起きた事を判定するにはどのようにすればいいのでしょうか?
PerlもLynuxも初めてなので、出来るだけ簡単な方法を教えていただけると
ありがたいです。

よろしくお願いします。

565 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 13:04:46 ]
Net::FTP で書き直したらいいんじゃないかな。

566 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 15:35:04 ]
>>564
Net::FTPでスクリプト書く例
search.cpan.org/~gbarr/libnet-1.20/Net/FTP.pm

モジュールが入ってなかったら「perl CPAN」でググってCPANの使い方覚えていれろ

567 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 16:26:22 ]
Lynuxはおらも初めてだ

568 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 17:13:07 ]
>>565-566
そのやり方で書き直してみます。
ありがとうございました。

>>567
Linuxの打ち間違いですね。

569 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 23:30:35 ]
>>565-566

教えていただいた方法で組んでみたのですが、複数のファイルをワイルドカードで
指定して取って来るにはどうしたらよいのでしょう?

対象のファイル名には出力された日付と時刻が含まれていて、個数も名前も不定
なのです(○○○YYYYMMDDHHMM.logのようなファイル名で、日付部分が
当日のものだけ取って来たいのです)。

何度もすみませんがよろしくお願いします。





570 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 01:45:03 ]
sub mget {
   my($ftp,$pattern) = @_;
  foreach my $file ($ftp->ls($pattern)) {
     $ftp->get($file) or warn $ftp->message;
  }
}


571 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 23:22:19 ]
>>570
どうもありがとうございます。
上手く持ってこれました。



572 名前:デフォルトの名無しさん [2007/02/07(水) 11:31:08 ]
希望結果を得たいのですが、実行結果の通りになります
以下のソースで実行結果になることは納得できるのですが、
希望結果を得るためにはどうすれば良いのでしょうか?

●ソース
@$data=(
{'name'=>'test1','pay'=>'1000','cancel_flg'=>'0','create_date'=>'20070131','cancel?date'=>''},
{'name'=>'test2','pay'=>'2000','cancel_flg'=>'1','create_date'=>'20070110','cancel_date'=>'20070120'},
{'name'=>'test3','pay'=>'100','cancel_flg'=>'0','create_date'=>'20070201','cancel_date'=>''},
);
foreach(@$data){
push(@lst,$_);
if($_->{cancel_flg}){
$_->{create_date}=$_->{cancel_date};
$_->{pay}="-".$_->{pay};
push(@lst,$_);
}
}
print "$_->{name}\t$_->{pay}\t$_->{create_date}\n" foreach(@lst);

●実結果
test1 1000 20070131
test2 -2000 20070120
test2 -2000 20070120
test3 100 20070201

●希望結果
test1 1000 20070131
test2 2000 20070110
test2 -2000 20070120
test3 100 20070201

573 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 11:44:59 ]
foreach(@$data){
push(@lst, {%$_});

574 名前:デフォルトの名無しさん [2007/02/07(水) 11:55:08 ]
>>573
ありがとうございます
希望どおりの結果を得られました
ハッシュ内のデータを1つずつ別のハッシュに移し替えることで回避していましたが
これからはソースがスマートになりそうですw
私が無知なだけだと言う話かも知れませんが、勉強になりました

575 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 12:23:24 ]
こういうことだな。
$X = ['A'];
$Y = $X; #リファレンスデータのポインタ(?)だけをコピーして、データそのものはコピーしてない。
$X->[0] = 'B';
print $Y->[0];

結果「B」

576 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 12:36:30 ]
ちょっとCPANで調べるとStorableのdcloneとか、
Clone(::More/Fast/PP/Any...)とかなんかたくさんあるんだけど
どれを使うのがいいんだよ

577 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 12:39:19 ]
俺は年寄りなのでcancelないときもコピーすんのもったいないと思ってしまう


578 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 13:56:18 ]
辞書みたいなものを作っているのですが、見出し語にダブりが多数あります。
こんな感じで。

<midashi>kuki</midashi>
茎とはクキである。・・・・・

<midashi>kuki</midashi>
  茎とはクキである。・・・・・

見出し部分タグ内が同じ場合のみ、一つ残してダブりのぶんは見出しも本文も消す、
という作業を行いたいのですが、perlで出来ますか? 
何を勉強すればよいのか、示唆頂ければありがたいです。

579 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 14:05:52 ]
xmlなら、専用のエディタ使う方がよっぽど早くて安全だと思うのだが。



580 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 16:05:05 ]
ファイルのパースさえ出来れば楽勝だろうけどたぶんそこが一番の問題だと思う
機械読み取りを考慮した仕様になってればいいんだが

581 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 22:15:16 ]
配列を初期化したいのですが、どのようにすればいいのでしょうか?

引き渡したパスにあるファイル名を配列に入れて、そのファイル1つ1つを順繰りに
処理していきたいのですが、1度処理をした後でもう1度処理を行うと、最初に配列
にセットしたファイル名が配列に残ってしまっています。
下のソースだと、「1回目」と「2回目」のところでは同じ内容のファイル名が表示
されます(2回目では何も表示されないで欲しいです)。
どこがおかしいのでしょうか?ご指導を宜しくお願いします。

sub aa{
($path) = @_;
@localfl;
@dir;

opendir(DIR,$path) || return(-1);
@dir = readdir(DIR);
foreach $f (@dir){
if($f =~ /^\.\.?/){ next;}#親&カレントフォルダ(.と..)を除外
$localfl{$f} = $f;
}
foreach $f (sort(keys(%localfl))){
print("1回目 $f\n");
}
undef @localfl;#これでクリア?
@localfl = ();#これでクリア?
foreach $f (sort(keys(%localfl))){
print("2回目 $f\n");
}
}

582 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 22:20:07 ]
@localfl と %localfl は別物ですよ

583 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 22:55:59 ]
なぜに Perl4 …
変数全部グローバルだし

584 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 23:05:43 ]
>>582
@localflには最初から何も入ってなくて、%localflをクリアしてないから
前の中身が残ってるということでしょうか?
%localflの中身をクリアすればOKですか(%localfl=""; とか・・?)

>>583
すみません、まだPerl触り出して1週間のド素人なもので・・。


585 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 23:30:02 ]
%localfl = ();

586 名前:582 mailto:sage [2007/02/07(水) 23:36:52 ]
とりあえず >>585 の %localfl = (); または undef %localfh; で意図する結果が得られます

バグの温床になるのを防ぐために use strict; と use warnings; をお薦めします
変数を宣言するときは my を使ってください
適当に書き直したらこんな感じでしょうか

use strict;
use warnings;
sub aa {
my ($path) = @_;
opendir(my $dh, $path) or return -1;
my @localfl = sort grep { ! /^\.\.?/ } readdir($dh);
foreach my $f (@localfl) {
print("1回目 $f\n");
}
}

587 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 00:19:07 ]
>>585
>>586

丁寧に教えていただきありがとうございました。
参考にさせていただきます。

588 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 20:09:30 ]
Encodeモジュール使い方を勉強中です。
なんとか試行錯誤しながらやってるんですが、
Data::Dumper がやたら文字化けします。
Dumper無しで出力すると化けないので
エンコードの部分は間違ってないと思うのですが。

589 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 20:16:37 ]
use strict;
use utf8;
use Data::Dumper;
binmode STDOUT,":encoding(cp932)";
my $str="あああ";
print Dumper $str;
print $str;
以上をutf8で書いて実行すると
$VAR1 = "\x{3042}\x{3042}\x{3042}";
あああ
となります
どうにかして日本語をDumperする方法はないでしょうか?



590 名前:578 mailto:sage [2007/02/08(木) 20:17:25 ]
ありがとうございました。
XML エディタ で検索してみましたが、どうもよく分かりませんでした。
ちなみに見出しは全部でaからzまで数十万あります。
ダブり語は多分、数千種類が各2〜7個くらいダブっています。
差し支えなければ、使えそうな専用エディタを教えて頂けないでしょうか?

ファイルのパースさえ出来れば楽勝だろうとおっしゃるのは素晴らしいです。
ちなみに楽勝というのはperl で、ですか? 
機械で読むというのがよく分からないのですが(すみません)、多分txt形式で
50MBくらいのファイルになりそうで、そこまでは出来ます。

591 名前:588=589 mailto:sage [2007/02/08(木) 20:19:08 ]
ちなみに環境は WindowsXP sp2 上で、ActivePerl Build 819 使用しています。

592 名前:デフォルトの名無しさん [2007/02/09(金) 02:39:44 ]
なんとなくWebProgからきました。取り留めもない質問なんですがお願いします。

WEBの掲示板などでよく、特定のタグだけ書き込み許可してますよね。それを実現するのに
下記のようなコードを書きました。最近、WEBに限らず、テキスト系の処理は何するにも
こんな感じでsplitして再帰する書き方に固執してしまってます。
字ヅラ的には短くて気に入ってるんですが、処理的には効率悪い気がしてならないのです。
もっとうまい方法があるでしょうか。

sub escape_limited {

my %args = (str => '', @_);

$exception = q!</?(?:a|img|blockquote|pre|code|span)(?:\s[^>]*)?>!;

my @scraps = split(/($exception)/im, $args{'str'}, 2);

if ((scalar @scraps) == 3) {

return &escape(%args, str => $scraps[0]). $scraps[1]. &escape_limited(%args, str => $scraps[2]);
}

else {

return &escape($args{'str'});
}
}

593 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 04:00:04 ]
sub escape_limited {
  my %args = (
    str     => '',
    allowed => qr{a|img|blockquote|pre|code|span},
    @_
  );
  my $text = $args{str};
  $text =~ s{( < (?! /? (?:$args{allowed}) \b ) [^>]* > )}{ escape($1) }iegx;
  return $text;
}

とかでどう?

594 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 09:53:04 ]

$LT = quotemeta escape("<");
$GT = quotemeta escape(">");

($str = escape($str)) =~s/$LT\/?(a|img|b|blockquote|pre|code|span)\b.*?$GT//ig;

とかねー。多分軽いよ。

タグ内に'<' '>' が無いことを前提にしてるみたいだけど、大丈夫?
属性も調べないと、スタイルシートとかスクリプトとか埋め込まれる可能性もあるし。

595 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 10:35:31 ]
うおっ、間違えた。正規表現のリテラルのトコ…。
s/$LT(\/?(?:a|img|b|blockquote|pre|code|span))\b(.*?)$GT/<$1$2>/ig

だわな。スマソ

596 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 13:59:17 ]
試しました。
592(私):スプリット型
593:一発置換型
594:例外事後処理型

マッチングがひとつもない場合
592:速い
593:圧倒的に遅い
594:速い

マッチングがある場合
592:圧倒的に遅い(しかも多重再帰の警告でまくり)
593:少し速い
594:速い

一旦、なりふり構わず置換してから例外を元に戻すってのは、
分かりやすいだけで処理的に気持ち悪いと思ってましたが、
意外と効率いいんですね。


597 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 14:07:03 ]
お礼を忘れました。みなさんありがとうございます。
ひとつ、事後処理型の場合、対象文字列に最初からエスケープ文字が
含まれてるケースを考慮する必要がありますね。これが一番やっかいかなあ。


598 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 14:10:29 ]
いや、一旦、二重エスケープになって元に戻るからいいのか。
混乱してきたので仕事に戻ります。


599 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 15:02:53 ]
>>590
テキスト読み込んで処理はPerlの得意とする分野なので楽勝

タグは<midasi></midasi>だけなのか?その他のタグがあったとして処理する必要はないのか?
複数の同じ見出しに対し残す本文はどれでもいいのか?
本文中にタグや特殊文字があったりした場合は?一意に判別できるエスケープの仕様はある?

あたりの仕様さえ確定できればファイル読み込みのやりかた、正規表現、ハッシュあたり覚えればできるっしょ
ちゃんとしたXML形式になってるなら専用のパーサ使えば楽が出来るが、正規表現でも十分なように思える



600 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 23:36:51 ]
ちゃんとしたXMLになってなくても、XML::Liberal使えばわりといける。

601 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 03:35:34 ]
wxperlを使ってGUIのメモ帳を作っています。ファイルを新規に保存するとき
ファイルと同名のフォルダをつくりたいのですがなぜかうまくいきません。
my $filename = $saveasdialog->GetPath;  
$this->{text_ctrl_1}->SaveFile($filename);
mkdir($filename);

このスクリプトで、一行目でwxperl filedialogオブジェクトにより
ファイル名が取得され$filenameに入ります。2行目でsavefileメソッドで
テキストが$filenameの通りに名前がつけられ保存されます。これは正常にいきます。
しかし、3行目のコードではフォルダが作成されません。

wxperl固有というよりもperlのコードの書き方に問題があるような気がするのですが、
アドバイスがあったらお願いします。

602 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 03:46:04 ]
> ファイルを新規に保存するときファイルと同名のフォルダをつくりたい

なんじゃそりゃ??

603 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 03:54:30 ]
どの OS でテストしてるんだか知らないけど、ファイルシステム側の問題だろう。
例えば Windows では同名のファイルとフォルダは作れない。

604 名前:601 mailto:sage [2007/02/10(土) 04:31:21 ]
>>603
すみませんでした。windows xp, active perl環境です。
>例えば Windows では同名のファイルとフォルダは作れない。
これは知りませんでした。というか大昔に聞いたことがあるような気がしますが
盲点でした。
mkdir($filename."Folder");
のようにしたら("作成したファイル名"Folder)という名前でフォルダが出来ました。
自分の考えている機能としてはこれで十分先に進めそうです。
ありがとうございました。


605 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 13:39:41 ]
て言うか、同名のファイルとフォルダを作れるファイルシステムってあったっけ?

606 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 13:43:46 ]
同名のファイルとフォルダがあるとApacheがまいっちんぐしちゃうよ

607 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 15:15:31 ]
>>605
むかし、「同名のファイルとディレクトリ作れるんじゃねえ!!」と怒った記憶がある。


608 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 17:42:01 ]
これも拡張子を非表示にするゆとり教育の弊害か…

609 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:27:55 ]
これもファイル名とディレクトリ名を同じ名前空間に置くという異常なことを
やったUNIXの弊害か……



610 名前:デフォルトの名無しさん [2007/02/10(土) 18:44:58 ]
初学ながらリファ本片手にCGIスクリプトを書いています。
下記のような問題にぶつかるもどうにも解決方法がわかりません。
どうすればよいか教えてください。よろしくお願いします。

【やりたいこと】
 投票CGIの改造で、イエスノーの2択の選択肢の投票に応じて、表示されて
いる数字も増減されるようにしたい。 数字の増減はカウンタスクリプトを流用し
ています。

【現在書いているスクリプト(抜粋)】
open(FILE, "+<./count.dat") or die("エラー:カウントファイルが開けません");
eval { flock(FILE, 2); };
$counta = <FILE>;
seek(FILE, 0, 0);
if($item == 1 ){ print FILE $counta+1 } else { print FILE $counta-1 }
close(FILE);

【問題点】
 例えば現在の$countaの値が100で、値が-1される場合、結果は99となって欲しいのに、990と
なって返ってきます。1000から999の場合なども同じです(どうも桁数が減る場合にうまく動作し
てくれない模様)。

【解決したいこと】
 100が99になって欲しい場合、その動作が990とならず希望どおり表示されるようにしたいです。

【その他】
 同じ桁数が変わる場合でも、99→100など、桁数が増える場合は問題が発生しないです。

611 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:45:26 ]
ファイル名とディレクトリ名の名前空間が異なるなんて想像したら
そちらの方が異常だと思うが。

そもそもそいった実装のOSはあるんかえ?

612 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:58:46 ]
>>609
最近それで頭に来てる。百万個を越えるファイルを持つ非常に巨大なファイルツリーを
トラバースするのにリソース食いまくり。
やっぱり分けてあるシステムってあるんだ。


613 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:19:45 ]
>610

use Fcntl qw/:flock/;

open my $fh, '+<', './count.dat' or die $!;
eval { flock $fh, LOCK_EX };
$count = <$fh>;
seek $fh, 0, 0;
print $fh $item == 1 ? $count + 1 : $count -1;
truncate $fh or die $!;
close $fh;

614 名前:610 mailto:sage [2007/02/10(土) 19:27:24 ]
>>613
正直、書かれている内容がさっぱり分からないので、リファ本で読み進めながら
テストしたいと思います。ありがとうございます。

615 名前:610 mailto:sage [2007/02/10(土) 21:14:23 ]
>>613
早速アドバイスを実装したところ、思った通りに動いてくれました。
どうもtruncateがポイントだったようですね。ありがとうございました。

616 名前:デフォルトの名無しさん [2007/02/11(日) 04:18:34 ]
正規表現でマッチしたものを任意の変数に入れて(もしくは任意のエイリアスに結びつけて)、
後で取り出すことって出来るのでしょうか?
マッチした順に$1や$2ではなく、(.*?>$name)とかした時、
(.*?)のマッチを$nameで受け取れると非常に嬉しいのですが。。
どなたかアドバイスいただけると嬉しいです。。

617 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 05:58:10 ]
>>616
マッチした後に代入しておくんじゃなんで駄目なんだ?
if (/(.*?)/) {
$name = $1;
}


618 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 06:01:14 ]
>>616
マッチしたもののリストが返ってくるのでそれを受け取る
($a, $b) = /^(.)(.)/;


619 名前:616 mailto:sage [2007/02/11(日) 09:49:39 ]
>>617-618
返信ありがとうございます _ _
なぜエイアリアスに結びつけたいかというと
βのウェブサービスのラッパーを作っていて、
正規表現がころころ変わる可能性がある(欲しい文字列が前後する可能性がある)からです。
欲しい文字列が前後してしまうと正規表現だけでなく、
その後の正規表現を受け取るコードも変更しなければならなくなってしまうので。。
# 正規表現を正規表現で自動生成するスクリプトを作っていたら、
# 文字列が前後した場合その部分は自動化できなくなってしまうことに気づき、
# 質問させて頂きました。



620 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 11:04:20 ]
>>588,599
それは文字化けでなく、エスケープされてるだけ。
Data::Dumper の仕様

621 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 11:30:06 ]
詳説正規表現第2版 7.8.8 名前つきキャプチャを模倣する
(.*?)(?{ $name = $^N })

622 名前:592 mailto:sage [2007/02/11(日) 15:22:43 ]
タグそのものだけでなく、例えば<pre>の内側はエスケープしない、など、
ちょっと込み入っている場合、例外事後処理だと信じられないほど遅くなりました。
コーディングに問題があったかも知れませんが。
という訳でスプリット型に戻しました・・。もっとうまい方法があるでしょうか。

sub escape_limited {
 
 my %args = (str => '', exception => [], exception_block => [], @_);
 
 my @regexp_array;
 
 (scalar @{$args{'exception_block'}}) and push(@regexp_array, sprintf(q!<(%s)\b.*?>.+?</\2>!, join('|', @{$args{'exception_block'}})));
 (scalar @{$args{'exception'}}) and push(@regexp_array, sprintf(q!</?(?:%s)\b.*?>!, join('|', @{$args{'exception'}})));
 
 return &loop($args{'str'}, join('|', @regexp_array));
 
 sub loop {
  
  if ($_[1]) {
   my @scraps = split(/($_[1])/is, $_[0], 2) ;
   return &escape($scraps[0]). $scraps[1]. &loop(pop(@scraps), $_[1]) if ((scalar @scraps) >= 3);
  }
  
  return &escape($_[0]);
 }
}


623 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 18:28:22 ]
>>619
たぶんアプローチが根本的に間違ってる。

624 名前:616 mailto:sage [2007/02/11(日) 19:05:54 ]
>>621
ありがとうございます!知らなかったです使わせて頂きます。
search.cpan.org/dist/perl/pod/perlre.pod
>>623
良くあるので、今回もそうかもしれないのですが;
www.nicovideo.jp/の検索のラッパーとして、
www.kiseki.info/niko-per/matome_search.cgiを作りました。
そして、上記ラッパーの正規表現生成に、
www.kiseki.info/niko-per/regexNikoniko.txt
というコードを使っていました。(>>621さんのアドバイス未導入コード)
お暇があればアドバイスいただけると幸いです。

625 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 22:38:26 ]
前から疑問に思ってたんですが、
$input = 'hoge';
$output = $input;
$output =~ s/ho/ha/g;
return $output;
これを$outputを使わずにreturn &func($input, /ho/, 'ha');
みたいに表現することはできないんでしょうか。

626 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 22:54:33 ]
こんなん?
join('ha', split(/ho/, $input))

627 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 23:09:34 ]
return str_replace('ho', 'ha', $input);

628 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 23:11:41 ]
>>627
どこの国のPHPだよ

629 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 00:06:59 ]
関数的な操作が充実してる割に標準でついてる関数がほとんど破壊的なんだよな



630 名前:592 mailto:sage [2007/02/12(月) 00:10:16 ]
すみません、うそを言いました。594さんのがやっぱり一番速いです。
遅くなったのはバグでした。スレ汚しすみません。

631 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 02:58:08 ]
パッケージが提供してる関数の一覧って簡単に取得できますか?

632 名前:631 mailto:sage [2007/02/12(月) 03:15:00 ]
ちょっとぐぐったら見つかりました。すみません。
search.cpan.org/~mlfisher/pmtools-1.01/pmeth
サブクラスなどにもぐっていく処理もありますが、どうもこの行がミソのようでした。
keys %{ "$module::" }

633 名前:デフォルトの名無しさん [2007/02/12(月) 07:44:44 ]
動的に生成された複数のPNG画像データをzip圧縮したいと考えています。

GDモジュールとArchive::Zipモジュールが活用できそう、
と調べたのですが不明点があります。

Archive::ZipモジュールのaddFileメソッドは引数としてファイル名が必要ですが、
GDモジュールのpngメソッドで動的に生成されたPNG画像データをzip圧縮するにはどうしたら良いでしょうか。
生成されたPNGデータをbinmodeを使用して画面表示するサンプルは見かけたのですが・・・

Perlを勉強し始めたばかりで基本事項も良く分からず五里霧中です。
アドバイスのほど、よろしくお願いいたします。

634 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 09:40:25 ]
addString

635 名前:デフォルトの名無しさん [2007/02/12(月) 13:43:39 ]
system() で所定の場所からwgetでファイルを持ってくる処理を作っています。
必ずしもその場所にファイルがあるとは限らないので、ファイルが無かった時と
接続出来ないなどで取ってこれなかった時を判定したいのですが、どうすれば
よいのでしょうか?


636 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 13:47:37 ]
system関数の戻り値でチェックできないの?

637 名前:デフォルトの名無しさん [2007/02/12(月) 14:20:49 ]
>>636
ありがとうございます。
やってみましたが、ファイルが無かった時も接続できなかった時も、戻り値は
256となるので区別がつかないです・・。

638 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 14:21:07 ]
wgetの複雑な機能をバリバリ使ってるなら別だが、ただファイルとってくる
だけならLWP使う方がその辺のエラー処理は書きやすいと思うけどな。


639 名前:デフォルトの名無しさん [2007/02/12(月) 14:39:33 ]
>>638
すみません、wgetを使わないといけないので別の方法で取ってくるというのは
出来ないのです。



640 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 15:06:35 ]
美しくないがstderr読むしかないだろう

641 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 15:11:25 ]
接続とファイル存在チェックだけ別ルーチンで作っといて、
それがOKならwgetで取ってくるってのはどうだ?

642 名前:デフォルトの名無しさん [2007/02/12(月) 15:59:14 ]
>>640,641
ありがとうございます。>>640さんの方法の方が簡単そうなのでこちらで
いこうと思うのですが、

open(STDERR, ">> errmsg.txt");
$ret = system("wget 〜");
close(STDERR);

とやって、$ret が256 だったらerrmsg.txtを1行づつ読み込んで
[ 404 Notfound ]という文字列が見つかったらファイルなし、無い
ならその他のエラー、という感じでいいのでしょうか?


643 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 16:27:24 ]
というかwgetはちゃんと終了コード返すけど?

# wget -q www.google.com/ && echo ok
ok
# wget -q www.google.com/nonexist || echo ng
ng
#

644 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 16:28:39 ]
あーごめん、404と接続できなかった時とを区別したいのか。早とちりスマソ。

645 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 20:57:32 ]
気にしてへんからええよ。
書いてくれてありがとな。

646 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 00:23:46 ]
>>642
perldoc IPC::Open3

647 名前:デフォルトの名無しさん [2007/02/14(水) 00:10:02 ]
数字と文字が混在した要素からなる配列があるんですけど、これをsortすると
1〜〜,11〜〜,2〜〜,23〜〜・・・
という風になってしまいます。
これを数字順
1〜〜,2〜〜,11〜〜,23〜〜・・・
にするにはどうすればいいのでしょうか??

648 名前:デフォルトの名無しさん [2007/02/14(水) 00:17:12 ]
>>647
@dst = sort { $a <=> $b } @src; # 数値ソート
@dst = sort { $a cmp $b } @src; # 文字列ソート(こっちは略せる)

649 名前:デフォルトの名無しさん [2007/02/14(水) 00:39:50 ]
>>648
それ試したんですけど、数字順にならないんです・・orz



650 名前: ◆TWARamEjuA mailto:sage [2007/02/14(水) 00:49:01 BE:3049474-2BP(6811)]
@dst = sort { sprintf qq|%02d|,$a cmp sprintf qq|%02d|,$b } @src;
とかとか♪

651 名前:デフォルトの名無しさん [2007/02/14(水) 00:53:47 ]
>>650
Sort subroutine didn't return a numeric value
ってエラーがががorz

652 名前:脱帽 mailto:sage [2007/02/14(水) 00:59:09 ]
ちょうてけとう

@dst = sort { ($a =~ /(\d+)/)[0] <=> ($b =~ /(\d+)/)[0] } @src;

653 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 00:59:59 ]
print join qq/, /, sort { $a <=> $b } qw/21d 1aa 11b 2cc 13e 5b/;
1aa, 2cc, 5b, 11b, 13e, 21d

ちゃんとなってるけどなあ

654 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:08:03 ]
>>653
いろいろ試したらできました。
splitを何回か使って要素の中の数列にまで要素を分割して比較したらうまくいきました。
俺なんかに付き合ってくれてありがとうございましたm(_ _m)

655 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 05:36:07 ]
ひ〜(悲鳴)

656 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 06:05:37 ]
(悲鳴)

657 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 06:25:24 ]
 シュー 三(悲鳴)

658 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 06:31:03 ]
質問〜perlから直接web上のファイルを開く事はできますか?
ソースをテキストで保存したくて

open(IN,"****・・・") or die "無理";

ってやってみたら無理でした。

659 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 06:56:37 ]
startup.plに
print int rand 10;
のようなコードを入れたtest.plをrequireして実行すると
↓↓httpdプロセス番号(実行結果)↓↓
1(3), 2(3), 3(3), 1(5), 2(5), 3,(5), 1(2), 2(2), 3(2)
のように完全でない乱数がある規則で発生してしまいます。
srandを加える、もしくはtest.plを意図的に更新し共有メモリから外すと期待通り全て違う表示がされます。
なぜこのような動作になるのか教えていただけませんでしょうか。
環境はFedora core5、Perl v5.8.8、mod_perl-2.0.2-5.1、httpd-2.2.2-1.2(prefork)です。



660 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 07:17:33 ]
>>658
www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq9.html#how_do_i_fetch_an_html_file

>>659
【激速】mod_perl SpeedyCGI FastCGI【激速】
pc10.2ch.net/test/read.cgi/php/1149505269/

661 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 07:32:33 ]
あ、ありがとうございます!
お陰で心置きなく寝れます。いや、仕事でした。いってきます;;

662 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 11:51:52 ]
% cat > test.pl
#!/usr/bin/perl
$ID = "id";
$PASS = "pass";
__END__

perlと余り関係ない質問かもしれませんが..
上の様なスクリプトを作った場合ファイルを開くと$PASSの「pass」が丸見えに
なるのですがこの部分を暗号化してわからないようにしてスクリプト実行時に
何らかの処理をして$PASSをpassに戻すような事は可能でしょうか?



663 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 12:01:30 ]
なんらかの処理をしてpassに戻ったら意味がないだろうが
SHA-1とかでハッシュにしてそれを持ってるとよろし

664 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 12:05:42 ]
>>663
ありがとうございます
ぐぐってきます..(´・ω・)

665 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 13:30:21 ]
音声入力でPerlスクリプトを書ける時代はいつになったら来るのかね
ttp://www.youtube.com/watch?v=KyLqUf4cdwc

666 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 14:08:49 ]
>>665
なんか失敗ばっかりしているように見えるね。

667 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 14:35:28 ]
>>665
warata

668 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 14:45:30 ]
>>665
やべえ面白すぎるwww

669 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 15:29:03 ]
SMTPを使わず/usr/lib/sendmail等から送る場合sendmailをパイプでopenする
手法がよく使われていますがこれらを実現出来るCPANに登録されているスタンダードな
モジュール名を教えていただけませんでしょうか。



670 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 15:39:30 ]
途中で手入力してるしw
開発部署のあちこちのデスクから、こんなん聞こえてきたらコエー。

671 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 15:56:45 ]
>>669
search.cpan.orgでsendmailをキーワードに検索すればいくつか出てくるので
適当に好きなのを使えばいいんじゃないか。


672 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 20:43:09 ]
>>665
この後に、オフィスPCに切れて投げ壊してる外人おっさんの動画を

673 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 21:31:26 ]
>>665
That was eazy.txt
ワロス

674 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 21:57:07 ]
Thank you って言ったらそれまで入ってもうて、必死で消してるw

675 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 22:00:56 ]
Undoできないのかな

676 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 22:03:04 ]
5分もかかってまだ open ( INFO しか入力できてねぇしw

677 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 22:12:07 ]
いや、INFO は結局入力できず手で入れてたし。

678 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 22:39:15 ]
検索結果を表示させるだけのものなんですが、大文字小文字の区別がつきません
297 if ( $line =~ /\Q$in{$form1}\E/ ) {
を   if ( $line =~ i/\Q$in{$form1}\E/ ) {  にするとエラーが出てしまいます

syntax error at test.cgi line 297, near "$in{"
syntax error at test.cgi line 297, near "/ )"
syntax error at test.cgi line 300, near "}"
Execution of test.cgi aborted due to compilation errors.

292 sub umu1 {
293 open(IN,"$file"); #csv読み込み
294 while(1) {
294 $line = <IN>; #csvの行を&lineに代入
295 @data = split( /,/ ,$line ); #@data[0~]にcsv行を個別に代入
296 if ( $line eq "" ) { last; } #無限ループ終了条件
297 if ( $line =~ /\Q$in{$form1}\E/ ) {
298 print "$data[0]$data[1]"."<br>"."\n";
299 }
300 }
301 close(IN);
302 }

679 名前:678 mailto:sage [2007/02/14(水) 23:04:54 ]
自己解決しました。なんともお粗末なミスで・・・



680 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:37:59 ]
WWW::Mechanizeを使用しているのですが、RecIE(www.h7.dion.ne.jp/~umiumi/)
のように、IEにhtmlの内容を表示させながらhtml解析する方法ってないでしょうか?
今はcontentで一旦ファイルに保存して、systemでIEを起動させ表示させています。


681 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 10:04:00 ]
sub foo {
処理
return(@A,@B,@C)
}

としている関数で、
(@A,@B,@C) = &foo()
↑のような感じで返り値を配列個別に受け取りたいんですが、
Perlでは可能なんでしょうか?


682 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 10:16:08 ]
sub foo {
hoge;
return \(@A, @B, @C);
}

($refA, $refB, $refC) = foo;

こういう感じにリファレンス渡しにしないといけない。

683 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 11:20:31 ]
>>680
Win32OLE
JavaScriptみたいなタグの分解も一緒にやってくれる

684 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:43:05 ]
Win32::GUIのListviewで行ごとに色を変えるにはどうしたらよいでしょうか?


685 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 14:44:56 ]
>>684
カスタムドローかオーナードロー
ってかWinAPI使うならCとかC++のが断然楽だぞ?

686 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 17:14:27 ]
>>685
カスタムロードがいいみたいですね。
Perlのサンプルコードはぜんぜんないようで。。。
困った

687 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 17:21:16 ]
ドロー

688 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 17:36:30 ]
>>686
Win32::GUIって自分でウィンドウメッセージ取れないのか?
取れるならC,C++のサンプルコードと同じようにできるが
できないなら知らん

689 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 19:01:28 ]
perl-win32-gui.sourceforge.net/cgi-bin/wiki.cgi?Change_Listview_Item_Color

サンプルコードは一応あるんだが、エラーが出て動かん。
カスタムドローの構造が古いのかな???
バイナリをいろいろ変換してるがよう分からんわ。



690 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 15:11:52 ]
>>689
substr( $lParam, 48, 8, $clrText);

substr(unpack("P56", pack("L",$lParam)), 48, 8, $clrText);
にするとエラーは無くなるが、文字色は変わらない。

要するに、$lParamはNMLVCUSTOMDRAW構造体へのポインタ
cf. www.kumei.ne.jp/c_lang/sdk3/sdk_261.htm
であって、この構造体の中身を書き換えればいいように思えるのだが、
Perl でどうすればいいのかわからない。

691 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 17:54:02 ]
CUIサーバープログラムで裏で1秒ごとにデータファイルを読み込みながら
クライアントにその時々の最新データを返すにはどのようにすればいいのでしょうか?

&readdata
sub readdata{

  after(1000,&readdata);
}

692 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 17:55:11 ]
Tkで使うafterのようなものがあるのでしょうか?
ということの説明のためにコードを書いていたのですが、途中で投稿してしまいましたorz



693 名前:デフォルトの名無しさん [2007/02/18(日) 19:55:10 ]
sleep(1)

694 名前:デフォルトの名無しさん [2007/02/18(日) 20:26:34 ]
ある数値が何行にもわたって書いてあるいくつかのテキストを読み込んで
指定した列の数値の平均を割り出すプログラムをperlで作りたいんですが
どのように作ればいいんでしょうか?
入門サイトなどをいくつか見てきましたが
これといったお手本が無く、行き詰まってしまいました。
お願いします。

695 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 20:47:41 ]
>>694
もちっとデータに具体性を出してほしい
例を上げて

696 名前:デフォルトの名無しさん [2007/02/18(日) 20:56:22 ]
>>695
レスありがとうございます。
例というか、実際に使うテキストファイルの最初の5行をそのままコピペしますが

0; 133.44; 3180
1; 134.76; 3180
2; 168.35; 3180
3; 141.58; 3180
4; 157.86; 3180
5; 176.92; 3180

こうなってます。
一番左は列数、二列目が平均値を出したいデータ、三列目は無視してください。
二列目の数値の平均値が出したいのです。
ひとつのテキストファイルに44640行、
こんな感じの数値がずらずらと並んでいるので
二列目の数値を全部足して44640で割る、ということがしたいんです。

697 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 21:11:30 ]
とりあえず
・ファイルをperlに読み込んで各行をループさせる
・一行の中で、2列目の数値を取り出す
といった操作が必要だけど、
ファイルの読み書きや、正規表現とか、まったく何も分からないの?

698 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 22:01:45 ]
>>694
ちょうど最近それっぽい記事が出てた。
ttp://codezine.jp/a/article/aid/904.aspx
区切り記号が「,」か「;」の違いがあるとか微妙にちがうけど、
コレが理解できれば希望のスクリプトを書くのも出来るはず。
コピペだけですませようとしてるんなら無理だけど。

699 名前:デフォルトの名無しさん [2007/02/18(日) 22:02:02 ]
>>697
一応、基礎的なことはサイトを見て勉強してきたんで
正規表現のことや
ファイルを読み込んでコマンドプロンプトに内容を表示させたり
ファイルの作成、書き込みなどは理解しているつもりです。
ただそれらのことを組み合わせてプログラムを作るとなると
まだよくわからないんです。
もう明日中には完成させなきゃならないんで
できればヒントだけでもお願いしたいです…



700 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 22:08:59 ]
こんな感じじゃね?試してないけど。

my $sum = 0;
my $i = 0;
for my $file (qw(unko1.txt unko2.txt)) {
 open my $fh, $file or die "開けん";
 while(<$fh>) { $sum += (/;\s*(-?\d\.\d);/)[0]; $i++; }
}
print "阿部怜治:", $sum / $i, $/;


701 名前:694 [2007/02/18(日) 23:30:17 ]
>>698.700
ありがとうございます。
もう少し頑張って明日試してみます。

702 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 00:43:52 ]
じゃ模範的なperlで
perl -pae "$l++;$s+=$F[1]}{$_=$s/$l" input.txt

703 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 00:58:40 ]
perl -F";" -lane '$t+=$F[1]; END{print $t/$.}' input.txt

704 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 04:15:19 ]
>>702
$F[1]}{

}{
って何してるの?

705 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 04:59:09 ]
>>704
$ perl -h
-n assume "while (<>) { ... }" loop around program
-p assume loop like -n but print line also, like sed

-p は while (<>) { ... print; } で囲まれる。

706 名前:デフォルトの名無しさん [2007/02/19(月) 05:26:43 ]
挙動的に同じって意味だと思ってたら、
本当にプリプロセッサのように囲まれるのね

707 名前:デフォルトの名無しさん [2007/02/19(月) 18:41:27 ]
if ($a) { print $a; }
この書き方と

print $a if $a;
この書き方では何か違いはあるのでしょうか

708 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 18:44:48 ]
見た目

709 名前:デフォルトの名無しさん [2007/02/19(月) 20:24:07 ]
すいません、質問です。
大体5万行くらいの大きさのテキストファイルから、
重複している行
(連続して重複してるわけでは無く、内容が同じ行が
とびとびに存在してる)を一つのこして、残りは省く
というスクリプトを書く場合、
1)1行目はそのまま書き出す
2)2行目は1行目と比較して、同じだったら書き出さない、違ったら書き出す
3)3行目は1行目と比較して、同じだったら書き出さない、違ったら2行目と比較して、、、
4)以下繰り替えし

このようなスクリプトしか無いのでしょうか?
処理に非常に時間がかかるので、何か良い方法があったら、御教示下さい。




710 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 20:31:36 ]
>>709
「perl 重複」でぐぐればいろいろテクニックが見つかる

711 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 20:36:03 ]
>>709
5万行くらいなら全部ハッシュテーブルに詰め込んでも大丈夫そうだが

順序崩していいならソートしてから重複を除くのがいいだろう

712 名前: ◆TWARamEjuA mailto:sage [2007/02/19(月) 20:38:10 BE:2613683-2BP(6811)]
1. 1行目の内容をハシュのキーに詰め込む。
while (<$fh>) {
 $hash{$_} = 1;

2. 読み込みが終わったら、keyを書き出す。
 print for keys %hash;


1-1. 読み込んだ順に書き出したい時。
my $line;
while (<$fh>) {
 $hash{$_} = [$_, ++$line];

1-2. 先に読み込んだ方を有効にしたい時。
 $hash{$_} = [$_, ++$line] unless $hash{$_} ;

2-1. 読み込みが終わったら、sortしながらkeyを書き出す。
 print for sort $hash{$a}->[1] <=> $hash{$b}->[1], keys %hash;

脳内妄想なので、補完よろしこ(照)

713 名前: ◆TWARamEjuA mailto:sage [2007/02/19(月) 20:39:43 BE:1742382-2BP(6811)]
ん、、、リファレンスにしなくても良かったか(呆)

714 名前:709 mailto:sage [2007/02/19(月) 20:42:52 ]
>>710-712
ありがとうございます。ハッシュテーブルを使う方法は、
全く考えてませんでした(というか今迄使ったことが無かったので)

とりあえず、ハッシュテーブルの使い方を勉強してきます。

715 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 20:57:05 ]
perl -ne 'print if not $seen{$_}++;'
でいいだろ。

メモリ足りないようならtie()使ってDBMファイルをワークに使えばよし。

716 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 20:58:32 ]
Perl やっててハッシュを使ったことが無いとな

717 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 22:07:13 ]
今までperlやってなかったんだろ

718 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 22:16:49 ]
無名(?)のBLOCKで、
{} ←中身が空だとエラーになるんだけど、素のBLOCKは使ってもいいのか、
使えるが推奨されてないのか、perl的でないのか、どんな感じなんでしょう?

719 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 22:28:43 ]
WindowsでNMAKEが必要なモジュールのインストールについて質問。
Windows2000では問題がなかったのに、vistaになってDBIとかがインストールに失敗する。
どうすれば回避できる?



720 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 22:41:06 ]
>>719
そのエラーメッセージで言われてるところを直せばインストールできるんじゃないか

721 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 22:46:44 ]
>>718
$hoge = {};
何か見えてこないかい?

それからperlrefのMaking Referencesの3番辺りに目を通すといいと良いかと。
…スクリプティング言語資料室さんの訳、そこの所間違ってるかな
> 一方、ハッシュではなくBLOCKへのリファレンスを返すのであれば、

722 名前:718 mailto:sage [2007/02/19(月) 23:08:43 ]
>>721
おー、ありがとう。丁度良い書き方が見つかりました。

{}だけ書いて中身は後で書きたいときに、エラーになるのが気持ち悪かったのですが、
{;}という方法があったか!

723 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 16:33:08 ]
最近対策済みのスパムに漏れて書き込みが散見されるので
if ($comment !~ /(\x82[\x9F-\xF2])|(\x83[\x40-\x96])/) {&er_("cannot write!","1");}

ここを変えたいと思います。
ここをひらがなの「あ」〜「ん」が含まれていなければ、という意味にしたいのですが、

「あ」は 82A0
「ん」は 82F1 です。

(\x82[\x9F-\xF2])|(\x83[\x40-\x96])
これをどう治せばいいのでしょうか?

↑正規表現とマッチングを理解していないので、
これのはっきりとした意味がわかっていません。
たぶんカタカナまで含まれていると思うのですが・・。

724 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 16:51:19 ]
>>723
sjisか。
| の左側がひらがなで、右側がカタカナでしょ。
ひらがなだけよけたいなら、

$comment !~ /\x82[\x9F-\xF1]/

でいいんじゃね?

725 名前:723 mailto:sage [2007/02/20(火) 17:04:41 ]
>>724
ありがとうございます。
ひらがなのみのフィルタで無事動きました。

726 名前:中の人 mailto:sage [2007/02/21(水) 00:01:39 ]
>>721
すまん確認した。
どこをどうすればこういう勘違いをするんだかわれながら不思議だ。

つーことで今週末までをめどに修正しておきます。


727 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 21:57:48 ]
なるほどねぇ

728 名前:688 mailto:sage [2007/02/21(水) 22:09:52 ]
>>690
自己解決しました。

my $CopyMemory=new Win32::API("kernel32", "RtlMoveMemory", "NPI", "V");
defined $CopyMemory or die "Cant find CopyMemory";

$CopyMemory->Call($lParam+48, $clrText, 8);


729 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 22:18:46 ]
>>728
訂正688→686



730 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 23:31:13 ]
>>728
substr( $lParam, 48, 8, $clrText);

$object->TextColor( (unpack('II',$clrText))[1] );
$object->TextBkColor( (unpack('II',$clrText))[0] );
にする方が楽だと思うけど、自己解決おめでと。

731 名前:686 mailto:sage [2007/02/22(木) 00:45:28 ]
>>730
それじゃ、Selectすると全部色変わっちまうぜよ。

732 名前:690 mailto:sage [2007/02/22(木) 01:35:07 ]
>>728
自己解決おめでとう。
>>689
substr( $lParam, 48, 8, $clrText);
の意味について考え直したのだが、以前のバージョンのActivePerl では
「裏仕様」として、「$lParam がポインタと考えられる場合は、間接指定
されたアドレスの文字列(バイト列)を操作し、そうでなければ$lParam
そのものを操作する」というのがあったのではないだろうか。
>>689 のソースを読む限り、そうとしか思えない。
 ところが、この「裏仕様」は危険であるし、安全確実な間接アドレス指定方法
が手当てされたから、いつかのバージョンで廃止されたんだろうね。


733 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 16:07:47 ]
if( $ENV{REMOTE_ADDR} eq ’’ )
ってありえるのでしょうか?

734 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 16:26:33 ]
>>733
CGIとかで動かしてるなら鯖の仕様次第だし
普通にコマンドラインから実行すれば空になる

735 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 19:59:42 ]
$comment に http の文字が5つ以上あるとエラーを出したいのですが、
正規表現でのチェックはどうすればいいのでしょうか?

if( $comment /~ (.*http.*http.*http,*http,*http) ) { error(); }

こんな感じでしょうか?orz

736 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:46:31 ]
if ($comment =~ /(.*http){5}/s) { error(); }

737 名前: ◆TWARamEjuA mailto:sage [2007/02/22(木) 21:22:57 BE:5227968-2BP(6811)]
print "error" if $comment =~ /http/g > 4;
 だめだった。。。

print "error" if scalar @{[$comment =~ /http/g]} > 4;
 桶だった。。。

詳しい人の解説キボンヌ(照)

738 名前:脱帽 mailto:sage [2007/02/22(木) 21:26:24 ]
スカラーだと真か偽しか返さないから

739 名前:脱帽 mailto:sage [2007/02/22(木) 21:27:58 ]
スカラーの場合は真か偽しか返さないからじゃ



740 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 21:44:26 ]
スカラーコンテキストでマッチした数が返ってくるのは置換の s///g の場合。
なので、もしそういう風に書きたいのなら

print "error" if $comment =~ s/http/http/g > 4;

とか書くといいかも。

741 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 22:04:23 ]
なるほどねぇ

742 名前:735 mailto:sage [2007/02/22(木) 22:24:08 ]
if($comment =~ s/http/http/g > 4){ &er_('cannot write!');}
これでいけました。

s/hogehoge/fugafuga/gの s と g の意味がわからなかったのですが、
調べて理解できました、ありがとうございます。

743 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 13:36:53 ]
WindowsXP + ActivePerl 5.8.8 build 820 です
こちらは初めてです、29箱目ということで既出質問だったらすみません

上記環境で モジュール Encode が threads と同時に上手く働きません
perl素人の自分なりに調べた結果、Encode モジュールはスレッドセーフでは
ないのではないかと思い始めたのですが、それで間違いないでしょうか?
それとも私が何か大事なお約束や呪文を忘れているのでしょうか

また、スレッドセーフで無かった場合、各スレッド内で文字コード変換を
行いたい場合、皆さんはどのようにしているでしょうか

744 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 14:04:52 ]
>>743
適当にぐぐったらこういうのがあった。

ttp://www.nntp.perl.org/group/perl.perl5.porters/2007/02/msg120729.html

確かに試すとたまにおかしな結果になる。ちなみに手元のバージョンは
v5.8.8 built for i486-linux-gnu-thread-multiだった。

マニュアル見てもthread-safeであるとは書いてないし、原則は明記されて
なければunsafeと思えだから間違ってはいないのだろう。

で、俺はスレッドでEncode使った経験はないからなんともいえないのだが、
普通に考えたら適当なshared variableでlockかけてから使うぐらいしか
ないのではないだろうか。


745 名前:743 mailto:sage [2007/02/23(金) 14:22:08 ]
>>744 返信ありがとうございます

確実に再現性のある最小コードを続いて投稿…と思ったのですが上手くいかずorz
自分の考え違いだったかもと思っていたところでした

URL 先のコードを試した結果、私の環境でもおかしな結果を不規則に起こしました

再入しないようにとりあえず自衛していく方向でいってみます
ありがとうございました

746 名前:743 mailto:sage [2007/02/23(金) 16:42:34 ]
他のモジュール内でもEncode使っているのが多くありそうですね

PerlIO layer での :encoding(〜) とか
HTTP::Message の decoded_content とか便利だなーとガシガシ使っていたので
どんどん泥沼のソースになっていきましたorz

747 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 16:45:17 ]
よく使われる奴はthread safeにして欲しいね


748 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 22:14:02 ]
小飼氏(メーリングリスト)に投げてみたらいいんじゃないかな。
つーか投げてほしい。

749 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 22:54:10 ]
blogの感じからするとすごく暇そうなので「直せやおら」とか言うといいんじゃね?>Encode
メーリングリストはJcodeメーリングリストでok



750 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 02:14:26 ]
あのヒゲモジャのことだからギブミーpatchでかえされるに200ペソ

751 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 11:03:22 ]
それはひどい>ギブミーpatch


752 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 13:51:21 ]
なんの解決にもならないw>ギブミーpatch

753 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 14:57:03 ]
>>751-752
なにが「ひどく」て「解決にならない」なの?
ライセンスがArtisticとGNU GPLのデュアルライセンスで、
どっちもソースが公開されているものなんだから不具合あったらソースを追って自分で改変するくらい当たり前じゃん。
おまえらはフリーライダーなの?それともそれをやるだけの能力がない低脳なの?


754 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 15:28:14 ]
これは酷い混じれ酢だ

755 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 17:43:38 ]
少なくとも小飼氏よりは低能間違い無しです><

756 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 20:38:11 ]
patchが作れるなら人に頼らないしメールも送らないってば。

757 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 20:55:47 ]
「ギブミーpatch」といわれたら、「無理!」って返事すればいいだけ。

キラクニヤレヤ〜♪

758 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 22:05:02 ]
(´・ω・)

759 名前:デフォルトの名無しさん [2007/02/24(土) 23:26:36 ]
質問です。
浮動小数点計算をループでしていてその結果を出力したら、
あるタイミングから#INDというのが出力されました。
これは一体なんでしょうか、、、



760 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 23:35:56 ]
不定値(正負の無限大 or NaN)
0除算してるんじゃね?

761 名前:デフォルトの名無しさん [2007/02/24(土) 23:48:49 ]
>>760
レスありがとうございます。
数値扱いされてないのでしょうか?
具体的なコードはこんなかんじなんですが、、


my $a = -0.1382 ** 0.000212494687632809;
my $temp = -0.1382;
my $b = $temp ** 0.000212494687632809;

これだと$aはちゃんと出力されるんですが、$bは-1.#INDと出力されます。。

762 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 00:11:04 ]
>>759
indefinite

763 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 00:27:05 ]
>>761
"**"は"-"より強いので
-0.1382 ** 0.000212494687632809

-(0.1382 ** 0.000212494687632809)に等しい。

764 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 01:53:36 ]
>>761
Math::BigFloat

765 名前:デフォルトの名無しさん [2007/02/25(日) 02:10:48 ]
>>762
>>763
>>764
レスありがとうございます。明日にでも試してみたいと思います。

766 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 12:00:00 ]
(´・ω・)12時

767 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 19:23:35 ]
(´・ω・)時報スクリプトを作ってみました..

#!/usr/bin/perl
use WWW::Mechanize;
$mech = WWW::Mechanize->new(agent => 'Mozilla/4.0 (MSIE 6.0;)');
while(1){
my(@t) = localtime(time);
unless( $t[1] == 59 && $t[0] > 20){sleep(30);next;}
$mech->get($ARGV[0]);
$mech->field("MESSAGE" => "時報");
$mech->click();
(@t) = localtime(time);
sleep(60-$t[0]);
$mech->click();
}

768 名前:デフォルトの名無しさん [2007/02/27(火) 20:41:51 ]
日本語PDF作るモジュールのお薦めってありますか?
PDFJ?


769 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 22:40:04 ]
PDFJ




770 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 00:10:35 ]
$input=<STDIN>;
$input=~s/\n//;

print "$input";

コマンドラインから「\n\n」と入力した場合に
「\n\n」と出力されるのではなく、改行2個が出力されるようにしたいんですが
どうすればいいですか?

771 名前:デフォルトの名無しさん [2007/02/28(水) 00:17:23 ]
自力でs/\\n/\n/g;とするかevalするか

772 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 00:24:39 ]
>>771
わかりました。ありがとうございます。

773 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 00:52:29 ]
>>771,772
evalは安易に使うとコマンド実行も出来ちゃうので正規表現にしとけ。
どうしてもeval使う場合は入力チェックしないと危険よ

774 名前:770 mailto:sage [2007/02/28(水) 01:14:01 ]
>>773
アドバイスありがとうございます。
自分でちょっとしたテキスト処理をやりたいだけなので大丈夫です。
\< や \/ や \. などの入力が入った場合、その都度
s/\\\</\</;
s/\\\./\./;
を書かなければいけないのでevalにします。ありがとうございました。

775 名前:768 mailto:sage [2007/02/28(水) 13:05:37 ]
>769 サンクス。
自由度がありすぎて面倒な部分もあるんだけど、
やっぱPDFJでいってみます。



776 名前:デフォルトの名無しさん [2007/02/28(水) 16:35:41 ]
質問です 頓珍漢だった笑ってください

perlはCの #include に相当する機能はあるのでしょうか?

今、Perlで統計解析の処理をしています。解析手法ごとに異なったスクリプト
を作っています。

入出力部分が複雑なんでここの部分と全体で使える共通サブルーチンだけ切り出して
別ソースにして、実行時に組み込んで使いたいのですが、どうも旨くゆきません。

ぐぐったりしてみましたが、Use、Requireの話しか検索できません。何か単純に
Includeする方法は無いのでしょうか?




777 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:48:38 ]
>>776
そう難しくないからモジュールにしてuse使うべきだな。


778 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:48:43 ]
  ァ  ∧_∧ ァ,、
 ,、'` ( ´∀`) ,、'`
  '`  ( ⊃ ⊂)  '`


779 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:49:14 ]
 ははは      
   ∧_∧                もうダメ      
   ( ´∀`)                 ∧_∧          モウ カンベン
.  ( つ ⊂ )     ヒヒヒヒ         (´∀` ,,)、 あははは    シテクダサイ
   .)  ) )  ○   ∧_∧ ,     , へ,, へ⊂),    ∧_∧ ○,
  (__)_)⊂ ´⌒つ´∀` )つ   (_(__)_丿  ⊂(´∀`⊂ ⌒ヽつ




780 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:52:53 ]
requireで問題なくできそうだけど駄目なんかな

781 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 17:02:56 ]
目線を高くしてオブジェクト指向にしたらどうだ?

782 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 17:07:13 ]
776はrequireやuseの説明を読んでないのではないのでは?
includeとスペルが違うからって脊髄反射したのか?
そうでないのなら、ますはrequireでは駄目だった点を質問文につけないと回答者は答えようがないぞ

783 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 17:08:32 ]
すまん
×776はrequireやuseの説明を読んでないのではないのでは?
○776はrequireやuseの説明を読んでないのでは?


784 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 17:11:40 ]
名前空間の問題とかあるし、普通にモジュール作るのがいいと
思うけどな。よほどこったことやるんじゃなけりゃ、Exporter
使えば一発だし。


785 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 17:14:16 ]
>>776は最後に1;を入れ忘れてると見た

786 名前:笑われた 776 mailto:sage [2007/02/28(水) 17:22:05 ]
すみません確かにRequireに関して真面目に読んでいないです

Cの#includeのつもりだったので、

------------ 今まで ------------

初期の宣言など・・・

open(FP, $filename) or die($filename);

while(<FP>) {
$hash{$key} = hoge;
}


------------ 変更 ------------


初期の宣言など・・・

require 'other.pl';

&sub($filename, \%hash);


と変更しただけなんですが・・・・実行時に



787 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 17:25:10 ]
ワッフルワッフル!!

788 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 23:16:02 ]
単純に定数の扱いがやっかいかな。perlは。

789 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 01:53:41 ]
use constant FOO => 'bar';

use Readonly;
Readonly my $HOGE => 'fuga';

こういうのでいいじゃん。



790 名前:デフォルトの名無しさん [2007/03/01(木) 08:05:44 ]
PerlでCPANによるモジュールのインストールが失敗します。
install LWP::Simple
....
BEGIN failed--compilation aborted at /System/Library/Perl/Extras/5.8.6/darwin-thread-multi-2level/HTML/TokeParser.pm line 12.
Compilation failed in require at ../blib/lib/HTML/Form.pm line 116.
html/form-param.......dubious
Test returned status 2 (wstat 512, 0x200)
DIED. FAILED tests 1-24
Failed 24/24 tests, 0.00% okay
....

どなたかお助けを。
環境:MacOS X 10.4 Tiger, perl 5.8.6






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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