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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 16:47:06 ]
"The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。

CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perlの区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: pc11.2ch.net/php/)

CGI の質問は答えが Perl と全然関係ない話に帰着する場合が
多かったりするので WEB プログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

www.perl.org/get.html
● 2010/02/19 現在の最新版: 5.10.1

▼ 前スレ
Perlについての質問箱 42箱目
pc12.2ch.net/test/read.cgi/tech/1257139591/
リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-7 あたり

321 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 00:16:24 ]
>>319
・「perl 配列の配列」でググる
・「perl CSV」でググる

322 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 00:40:12 ]
>>320

1 #! /usr/bin/perl
2
3 use strict;
4
5 my(@data, @array);
6 @data = (
7    '1 Takehara Shinji 500 600 1300',
8    '2 Hatakeyama Takanori 569 795 1560',
9    '3 Kouki Kameda 785 889 2695',
10    '4 Daiki Kameda 758 784 9000',
11    '5 Tomoki Kameda 580 120 984',
12 );
13
14 foreach(@data){
15    push(@array, [@{[split(/\s+/, $_)]}[3..5]]);
16 }
17
18 local $\ = "\n";
19
20 print $array[0][0]; #=> 500
21 print $array[1][0]; #=> 569
22 print $array[0][1]; #=> 600
23 print $array[1][1]; #=> 795
24 print $array[0][2]; #=> 1300
25 print $array[1][2]; #=> 1560


323 名前:デフォルトの名無しさん [2010/05/11(火) 01:17:33 ]
>>322
ありがとうございます。
外部からファイルを読み込む場合はどうすればよいのでしょうか?

324 名前:321 mailto:sage [2010/05/11(火) 01:45:17 ]
>>323
だから「perl CSV」でググれと教えたのに。ググれば
”csvファイルを読み込んで配列の配列に変換に変換する”
ttp://d.hatena.ne.jp/perlcodesample/20080728/1217336230
こんくらいすぐに出てくるだろ

325 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 01:51:03 ]
>>322を改良できんレベルの人なら>>324のリンク先飛んでもイミフだろ

326 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 01:53:57 ]
>>323
use IO::File;
my @data = IO::File->new('data.txt', 'r')->getlines;
chomp @data;

327 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 02:04:22 ]
use File::Slurp;
my @csv = read_file('hoge.csv');
chomp @csv;

328 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 02:19:44 ]
>>322
[@{[split(/\s+/, $_)]}[3..5]]

[(split /\s+/, $_)[3..5]]
のほうがいいよね。この場合に限れば /\s+/, $_ が無くてもよし。

つーかCSVなら最初からText::CSV(_XS)?使えばいいじゃんって話だけど。

329 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 02:46:24 ]
>>328
おお、/\s/まで省略できるのか
初めて知った
ありがt



330 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 03:42:18 ]
$_ = " foo\nbar\tbaz" としたとき、
split(/\s+/) だと ('', 'foo', 'bar', 'baz') が返るけど、
引数なしのsplit または split(" ") なら ('foo', 'bar', 'baz') になるってことだけ注意な。

331 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 01:12:21 ]
HTTP通信するにはなんていうライブラリつかえばいいの

332 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 02:31:39 ]
socks

333 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 13:31:19 ]
えっ?

334 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 13:35:41 ]
LWP

335 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 15:27:05 ]
コードポイントからその文字を出力したいです。
#!/usr/bin/perl
use strict;
use utf8;
use Encode;
use Encode::Guess;

my $cp = "4FAE"; # 「侮」のコードポイント
my $packed = pack("S", $cp);

my $decoded = decode("utf-16be", $packed);
print $decoded, "\n";

my $decoded = decode("utf-16le", $packed);
print $decoded, "\n";

できないです。

336 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 15:58:56 ]
pack("U", 0x4FAE) じゃだめなのか

337 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 16:16:02 ]
0x4FAE または hex("4FAE") または "20398"

338 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 16:22:45 ]
#!/usr/bin/perl
use strict;
use utf8;
use Encode;
use Encode::Guess;

my $cp = "4FAE"; # 「侮」のコードポイント
my $packed = pack("U", hex($cp));
print $packed, "\n";

ありがとうできました。でもwarningがでます。
$ perl cptest2.pl
Wide character in print at cptest2.pl line 9.

$

339 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 16:28:58 ]
16進文字列からバイト列への変換が間違ってるな。

pack("S", $cp)じゃなくてpack("H*", $cp)だろ。



340 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 16:32:44 ]
>>338
wide characterをいきなりprintするとそうなる。

encodeしてバイト文字列にしてからprintするか、
printする前に文字コード指定してレイヤつけとけ。

binmode STDOUT, ':encoding(utf-8)';

341 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 16:34:59 ]
binmodeつけたら直りました。
ありがとうです。

342 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 12:34:03 ]
www.cgarbs.de/japana.en.html
これをwindowsで動かせた人いますか?
perlのファイル1つだけのプログラムだからlinuxで動かすのは簡単だったんだけど
windowsではうまく動いてくれない

343 名前:デフォルトの名無しさん [2010/05/14(金) 13:21:02 ]
文字のバイトコードを得るほうほうを教えてください!
たとえば、a から 97 を得るようなことってできますか??

344 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:23:28 ]
ord("a")

345 名前:デフォルトの名無しさん [2010/05/14(金) 13:26:10 ]
ありがとう!

346 名前:デフォルトの名無しさん [2010/05/15(土) 03:08:54 ]
perlで文字をprint等で出力するとき、特定の行で改行をして出力するというようなことってできますか?

347 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 03:32:34 ]
できるよ安心して

348 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 03:44:17 ]
>>347
安心した
やり方を教えてちょ

349 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 04:42:20 ]
何だよ「特定の行」って



350 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 06:11:15 ]
質問の意図するところが分からない。このうちのどれか?
use strict; use warnings; print "is\nthis\nunko?\n";

use strict; use warnings; print << "END_OF_UNKO";
this
is
unko!
END_OF_UNKO

use strict; use warnings; use HTML::Template;
my $what_is_this = join "", <DATA>;
my $t = HTML::Template->new( scalarref => \$what_is_this );
$t->param('var', "was");
print $t->output;
__DATA__
this
<TMPL_VAR name="var">
unko!

351 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 06:50:15 ]
>>348

use IO::File;

my $fh = IO::File->new('hoge.txt', 'r');

while(my $line = $fh->getline){
print $line;
print "\n" if $line =~ /hoge/;
}

こんな漢字?

352 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 09:22:29 ]
$. == 行番号 とか。

353 名前:デフォルトの名無しさん [2010/05/15(土) 11:21:19 ]
perlで作った掲示板の連続投稿を制限する方法を教えてください。
一定時間が経過するまで再投稿できないようにしたいです。


354 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 11:59:34 ]
投稿者のIDに対して最後の投稿時間を記録する

355 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 12:24:13 ]
小規模ならグローバルでもいいんじゃないの?

# 30秒経過してない場合returnする
return if $g_last_post + 30 > time;
$g_last_post = time;


356 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 14:35:57 ]
>>353
IPのログはとってんだろ?
そこから判定すりゃいい
samba24みたいな手にするって方法もあるな
ちょっと技術がいるかも知れないが

357 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 14:55:21 ]
普通はそんなめんどいことしないでクッキー食わせて判定だと思うぜ

358 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 15:04:37 ]
ログは巨大だからなあ
自前でテーブル持つ方が軽い

359 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 15:21:54 ]
いやだから普通はクッキーだろっての



360 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 15:55:01 ]
↑バカは喋るな

361 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 15:58:24 ]
>>359
クライアントが書き込み後にクッキー捨てたらアウトだと思うんだがそうでもないのか
もうちょっと詳しく

362 名前:デフォルトの名無しさん [2010/05/15(土) 16:01:51 ]
>>349-352
長いテキストがあり、100文字目ごとに改行を入れるということです。
分かりにくくて申し訳ありませんでした。

363 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 16:17:33 ]
2chもクッキーだな

364 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 16:27:54 ]
>>362
Text::LineFold

>>353,354-359,361,363
板違い pc11.2ch.net/php/

365 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 16:29:03 ]
一足遅かったか

>>362
>>3
www.din.or.jp/~ohzaki/perl.htm#JP_Fold
search.cpan.org/search?m=all&q=fold&n=100

>>353
△▲ WebProg 初心者の質問 Part22 ▼▽
pc11.2ch.net/test/read.cgi/php/1272872528/

366 名前:デフォルトの名無しさん [2010/05/16(日) 21:25:10 ]
funcA();
if(hoge){ funcAErr(); }
else
{
 funcB();
 if(fuga){ funcBErr(); }
 else
 {
  funcC();
  if(fuga){ resultA(); }
  else{ resultB(); }
 }
}

こんな感じで事前処理にこけたら弾き、を繰り返して最後の処理で結果Aか結果Bのいずれかを返す、
と言ったコードがあるんですが、これをもっとPerlらしくシンプルに書きたいんだがどう書けばいいだろう……。
(ifネストが実際には3階層ではなく20階層くらいあります)


367 名前:デフォルトの名無しさん mailto:sage [2010/05/16(日) 21:43:55 ]
>>366
funcA() や funcB() の戻り値は無いのかとか、hoge や fuga が何を判定してるのかとか、
funcAErr() でなく funcErr('A') じゃダメなのかとか、エラー処理後に戻ってくる (if then else
で括る) 必要があるのかとか、Perlらしさ以前の問題だと思う。

368 名前:デフォルトの名無しさん mailto:sage [2010/05/16(日) 21:45:08 ]
こんな感じの改造すれば良いんちゃう?
my @tasks = (
 sub { () }, # <= funcA() とかが入る。
 sub { () },
 sub { () },
 sub { () },
 sub { () },
 sub { () },
 sub { 42 }
);

my $argument ;
for ( @tasks ){
 my $flag = $_->( $argument ) ;
 next if ! $flag ; # エラー処理やりたきゃ、ここを真面に。
 print qq{${flag}hoge\n} ;
 last ;
}


369 名前:デフォルトの名無しさん mailto:sage [2010/05/16(日) 22:25:07 ]
>>366
エラー処理はfuncA()、funcB()の中で例外発生させて
全体をevalブロックでくくり、例外をキャッチして処理
エラー以外の分岐は適当に処理をブロックでくくり、last、redoなどでコントロール

eval {
 funcA();
 funcB();
 {
  funcC();
  if (fuga) { resultA(); last }
  resultB();
 }
};
if ($err = $@) {
 $err->A ? funcAErr() :
 $err->B ? funcBErr() :
 $err->C ? funcCErr() : Err();
}



370 名前:デフォルトの名無しさん mailto:sage [2010/05/16(日) 22:49:10 ]
メールを受信して、添付の画像ファイルを画像処理し、サーバに保存したいと考えています。
メール受信時に本プログラムにメールを渡すようにメールサーバは設定しています。
以下ソースの関係している部分です。
----mailimage.pl-----
my $parser = MIME::Parser->new;
#ファイルの一時保存場所を指定
$parser->output_dir('./tmp');
$filename='';
#標準入力からメールを取得
my $entity = $parser->parse(*STDIN);
#添付ファイルがある場合のみ処理
if($entity->is_multipart){
#パートの数(本文と添付ファイルの合計数)
$count = $entity->parts;
#メール本文以外(添付のみ)を取り出し(本文は0番目のため、一番目から取り出し)
for($i = 1; $i < $count; $i++){
#ファイル名を含むパスを取り出し
$path = $entity->parts($i)->bodyhandle->path;
#ファイル名を取り出し
$filename =time. (fileparse($path))[0];
$filenameglobal=$filename;
`./out1 $path outputimg/$filename.bmp`;
}
}
out1というプログラムが画像処理を行うファイルで、第一引数に入力を、第2引数に出力先をとるように作成しています。
mailimage.pl < sample.eml
といった具合に、ローカル環境でeメールファイルを渡してやった場合は正常に動作します。
しかし、実際にメールを受信するとtmpファイルへの保存は行われるのですがout1で得られるべき出力画像が得られません。
どうやら、tmpフォルダに保存される前にout1を呼び出しているようで、入力がない状態になってしまっているようです。
解決策のご提示をよろしくお願いいたします。
また、一度ファイルに保存することなく直接メモリ上で受け渡す方法などもご提示いただけると幸いです。

371 名前:デフォルトの名無しさん [2010/05/17(月) 01:35:34 ]
perl から任意のアプリ(例えばメモ帳)を起動したいんだけどどう書けば良いのでしょうか?

372 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 01:49:44 ]
perl -e "`notepad`

373 名前:デフォルトの名無しさん [2010/05/17(月) 22:55:18 ]
cpan> install XML::Atom
*********いろいろ展開されて

Please download the file manually, save it to a directory in %PATH% (e.g.
C:\WINDOWS\COMMAND\), then launch the MS-DOS command line shell, "cd" to
that directory, and run "Nmake15.exe" from there; that will create the
'nmake.exe' file needed by this module.

You may then resume the installation process described in README.

-------------------------------------------------------------------------------
Warning: No success on command[C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site]
MIYAGAWA/XML-Atom-0.37.tar.gz
C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site -- NOT OK
Running make test
Make had some problems, won't test
Running make install
Make had some problems, won't install
Failed during this command:
MIYAGAWA/XML-Atom-0.37.tar.gz : writemakefile NO 'C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site' ret
urned status 512

cpan>
と表示されてしまいました。とりあえず、nmake.exe はダウンロードしました。
これからどうすればいいでしょうか?

374 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 00:12:07 ]
>>373
今使ってるperlをアンインストールしてActivePerlの最新版をインストールし、PPMを使え

375 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 00:23:08 ]
うちcpanが成功した試しがないわ
ppmならokだけど

376 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 05:28:00 ]
XS系はことごとく失敗する気がする…
特にXMLやHTMLのパーサー関連は入らん at Ubuntu

377 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 06:13:44 ]
まさかbuild-essential入れてないとかじゃないよな

378 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 06:45:12 ]
XML-Atomはppmに無いからめんどくさいんだよな
だから俺は使ってない
あとこいつマルチだな

379 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 08:46:53 ]
今ならStrawberry Perl入れた方が楽じゃない?
XML::Atomもすんなり入ったよ



380 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 08:55:06 ]
そもそもwindows系OSでperl使うのがすでに茨の道とも言える

381 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 10:03:01 ]
なんで?

382 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 11:48:53 ]
>>378
リポジトリにこれ加えとけ。
trouchelle.com/ppm10/package.xml

383 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 12:20:10 ]
elseifでなく何故elsifなんですか?

384 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 13:26:56 ]
母音が続くのが気持ち悪いから

elifじゃないのと聞かれたら解答に窮するが、CPPはelifなんだよな
文化によって多少違いはあるが、やはり、母音が続くのが気持ち悪いんだと思う

385 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 13:55:38 ]
いっそのことelfでいいじゃん。
短いし。

386 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 15:33:01 ]
最近プログラミングの勉強を始めました

print "hello world";

と書いてhello.plで保存し、ターミナルで

perl hello.pl

と入力するのはわかったんですが、hello.plはどこに保存すればいいのですか?
環境はMac OS Xです

387 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 16:10:27 ]
>>386
好きな場所

388 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 16:28:15 ]
>>386
今自分がいる場所におけばいい
違う場所に置きたいならフルパスで指定すれば実行できる

389 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 16:41:23 ]
>>382
サンクス
つか、ppmguiにリポジトリのサジェストなんてあったんだな
そこにも載ってたわ
重ねてサンクス



390 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 17:56:24 ]
>>386
perlの前にターミナルの使い方を覚えるためのBash入門を読んだ方が良いかも。

391 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 18:42:40 ]
それは的外れなアドバイス

392 名前:373 mailto:sage [2010/05/18(火) 21:37:27 ]
ATOM::XML をWinXP/Active Perl に入れたい
なにかヒントありますか?
>>374
>>375
>>379
ストロベリー入れましたけど、Activeパールと同じエラーです。
(nmake をダウンロードして、ダウンしたパッケージをmake して、
それから、再度ACTIVE Perl で,ATOM::XMLしたときとです。
やはり、パッケージが問題なのかな?
cpan> install ATOM::XML
Fetching with LWP:
cpan.strawberryperl.com/authors/01ma
Fetching with LWP:
cpan.strawberryperl.com/modules/02pa
Fetching with LWP:
cpan.strawberryperl.com/modules/03mo
Creating database file ...

Gathering information from index files ...
Populating database tables ...
Done!
Warning: Cannot install ATOM::XML, don't kn
Try the command

i /ATOM::XML/

to find objects with matching identifiers.

393 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 21:44:02 ]
現在 WinXP上にActivePerlが入っています。StrawberrryPerlを入れて共存できるのでしょうか?

394 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 21:49:59 ]
エラーメッセージくらい読めよ

395 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 21:52:02 ]
普通に考えるとパッケージ名ってAtom::XMLもしくはXML::Atomだからでは

396 名前:373 mailto:sage [2010/05/18(火) 21:57:06 ]
とりあえず、
install XML::Atom::Feed
とすると、したみたいになった。これってATOM::XML ってインストールできたのかな
Prepending C:\strawberry\cpan\build\XML-Atom-0.37-H4btN8/blib/arch C:\strawberry
\cpan\build\XML-Atom-0.37-H4btN8/blib/lib to PERL5LIB for 'install'
Installing C:\strawberry\perl\site\lib\XML\Atom.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Base.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Category.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Client.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Content.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Entry.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\ErrorHandler.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Feed.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Link.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Person.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Server.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Thing.pm
Installing C:\strawberry\perl\site\lib\XML\Atom\Util.pm
Appending installation info to C:\strawberry\perl\lib/perllocal.pod
MIYAGAWA/XML-Atom-0.37.tar.gz
C:\strawberry\c\bin\dmake.EXE install UNINST=1 -- OK
cpan>


397 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 22:13:16 ]
perlで添付ファイル取得して、それをopencvに渡して結果を保存したいんだが、出来ない。
ローカルでemlファイル読み込ませるといけるのに、メール受信をトリガに起動するとだめだ・・。
どうして?

398 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 22:32:58 ]
>>396
OKってかいてありますやん

心配なら
$ perldoc XML::Atom

399 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 22:34:23 ]
>>396
XML::Atom と ATOM::XML は全く別のモジュールだ。
(存在すればの話しだが)
お前さんが、いくら XML::Atom を入れたとしても、
ATOM::XML は永久に入らん。


気持悪いったらありゃしない。



400 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:22:56 ]
アハハハ

401 名前:デフォルトの名無しさん [2010/05/19(水) 14:46:33 ]
たとえば、[[:ascii:]]から'<'を除いた文字クラスを表わすにはどうしたらいいでしょうか?

402 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 18:51:09 ]
もともと入ってないやん

403 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 21:53:00 ]
数百のファイルを処理するPerlスクリプトがありまして、それがシーケンシャルに処理してて
クソ時間がかかるため、マルチスレッドでやらせようとPerlについて勉強しています。
で、いまんとこ、セマフォで並列処理数を制御し、joinするためだけのスレッドを動かして
かたっぱしからjoinするようにしています。おかげで処理時間は半分以下になったのですが、
これを添削していただけないでしょうか。もっとエレガントなやり方があれば教えていただきたいです。
よろしくおねがいします。

#!/usr/bin/perl
use strict;
use File::Basename;
use File::Path;
use threads;
use threads::shared;
use Thread::Semaphore;

use Codemap;
use SVG;

my $concurrency = 5;
my $semaphore = Thread::Semaphore->new($concurrency);
my $exitflag :shared = 0;
my $jointhreads = threads->new(\&joinThreads);

while (@ARGV) {
my $orig_svg = shift(@ARGV);
$semaphore->down;
threads->new(\&doSplit, $semaphore, $orig_svg);
}
$exitflag = 1;
$jointhreads->join;
exit 0;


404 名前:403のつづき mailto:sage [2010/05/21(金) 21:53:56 ]

sub joinThreads {
until ($exitflag) {
foreach my $thr (threads->list) {
if ($thr->tid and !threads::equal($thr, threads->self)) {
$thr->join;
}
}
print "\nThreads joined.\n";
}
}

sub doSplit {
my $semaphore = shift;
my $orig_svg = shift;

my $svg = new SVG($orig_svg);
$svg->setdumpdir("work.d");
if ($svg->modtime() > $svg->splittime()) {
$svg->dump();
print STDERR " $svg->{filename} : splitted\n"
} else {
print STDERR " $svg->{filename} : SKIP\n"
}
$semaphore->up;
}


405 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 14:07:11 ]
UTF8の〜をshift_jis(cp932)に変換して出力するとエラーが出てしまいます。
解決策があれば教えていただきたいです。
環境はWindows 7 64bitとActivePerl v5.10.1 64bitです。

use utf8;
binmode STDOUT, ":encoding(cp932)";
print "昨日は10時〜6時まで寝た。\n";

D:\>test.pl
"\x{301c}" does not map to cp932 at D:\test.pl line 3.
昨日は10時\x{301c}6時まで寝た。

406 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 14:20:39 ]
D:\>test.pl

何故こんなところで作業しているのか

407 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 14:54:09 ]
「〜」には
FULLWIDTH TILDE (FF5E)
WAVE DASH (301C)
の二種類がある。

408 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 14:57:40 ]
〜の厄介さはMacを使ってるとよく分かる

409 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 16:10:32 ]
macでなくても〜は厄介



410 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 16:13:53 ]
Macだとプログラムとか使わなくても
普段から〜が厄介になる

411 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 16:15:49 ]
え?

俺は生粋のマカーだけど、厄介さが全然分からん。
何かトラブるっけ? "〜"って。
Mac<=>Winのデータ交換とかの話し?


412 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 16:21:41 ]
Macで〜と書き込んだら
Winだと逆向きの波線に見えたり
最近は大丈夫な気はするが

413 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 16:31:53 ]
〜が厄介なんて、OS9時代の話だろ。
昔から機種依存文字問題とか、今はUTF8-macとUTF-8とか
もっと厄介なモンがあるから。


414 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 16:54:16 ]
OSXでの話だが

415 名前:405 mailto:sage [2010/05/22(土) 17:06:03 ]
皆さんレスありがとうございます。

>>405はmeadowから打ち込んだ〜は\x{301c}となり、
notepad等から打ち込んだ〜は\x{ff5e}になる事が原因で表示に失敗していました。
\x{301c}はshift_jisでは表示に成功しcp932では失敗しました。
\x{ff5e}はcp932では表示に成功しshift_jisでは失敗しました。

どうやらeucとsjisの〜はutf8の\x{301c}に対応していて
cp932の〜はutf8の\x{ff5e}に対応しているようでした。
なので例えばeucの〜をutf8に変換し、それをcp932に変換すると失敗するようです。

挙動がおかしいと思った元のプログラムではネット上にあるeucのページを取ってきて
utf8に変換し出力時にcp932に変換していたので上記の理由で文字化けしていた様です。
そこでeucをutf8に変換した際に\x{301c}を\x{ff5e}に変換するようにしました。
$utf8data =~ tr/\x{301c}/\x{ff5e}/;
そうしたところprintした際に"\x{301c}" does not map to cp932というエラーも出ず、無事〜が表示されるようになりました。

416 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 17:10:30 ]
意味不明

417 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 19:23:59 ]
>>405
use utf8は「フツーは使うな」とCPANに書いてあった気がする。
Windowsを呪いながらEncode使え。

#!perl
use Encode;

my $msg = "昨日は10時〜6時まで寝た。\n";
Encode::from_to($msg, 'utf8', 'cp932');

print $msg;

418 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 19:39:43 ]
>use utf8は「フツーは使うな」
理由は?

419 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 20:34:20 ]
>>417
>use utf8は「フツーは使うな」とCPANに書いてあった気がする。
どこに書いてあったの?聞いたことない



420 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 21:01:51 ]
> Do not use this pragma for anything else than telling Perl that your script is written in UTF-8.
もしかしてこれの事か?

421 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 21:08:00 ]
>>417
そのEncodeの作者が
>スクリプトはUTF-8で書き、use utf8;するのがモダンPerlのあり方です。
って言ってるけどな。
ttp://blog.livedoor.jp/dankogai/archives/51221731.html






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

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

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