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

285 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 17:13:28 ]
>>284
できました!ありがとう。

perl -i.BAK -p0 -e "s/^/PATH C:\\hage;%%PATH%%\n/" hoge.bat


286 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 01:58:11 ]
perlのスクリプトを含むWindowsのパッケージを
setup.exe
みたいな塊にまとめたいのですが
何がおすすめでしょうか?
昔単なる実行ファイルだけのときは
innoSetup使ってたけど

287 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 07:21:30 ]
PAL
Perl2EXE

288 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 12:04:34 ]
関数の命名でヒントください

「array化」を英語で書くとしたら
「arraylize」「arrailise」「arrailize」、
どれにしたらよいでしょうか?

テキストを読みこんで、それを配列に格納する
というありふれた機能を持つ関数の名前です
下のように使っています

my @list = arraylize ( "list.dat" ) ;

sub arraylize {
my $name = $_[0] ;

open ( FH ,"< $name" ) ;
my @listArray = <FH> ;
close (FH) ;

return @listArray ;
}

他にも、もっと語呂のいい名前があったら教えてください
それ以前に、同じような動作をするものがあったら知りたいです



289 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 12:16:00 ]
いきなりファイル名でというのは知らないけど、強いて言えば
IO::Handleのgetlinesが近いかなぁ。

本題とは関係ないが、せめてopenのエラー処理( or die $!
をつける程度でいいよ)はやっとけ。後で苦労するぞ。

290 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 12:27:01 ]
「ファイルを読み込んで配列を返す」処理につける名前にしちゃ arraylize は筋が悪いな
readfile なり readlines なりでいいだろ

どうしても array が重要だっつーんなら make_array

291 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 12:30:10 ]
まんまでいいなら、file2array

292 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 12:35:40 ]
sub arraylize {
my $name = shift ;

open ( my $fh ,"<", $name ) ;
my @listArray = <$fh> ;
close ($fh) ;

return @listArray ;
}


関係ないけど

293 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 12:39:50 ]
>「arraylize」「arrailise」「arrailize」
l はどっから出てきたんだよ



294 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 13:18:58 ]
セパレータが指定されたら split した配列を返したり、
配列だったらそのまま返したり、
ハッシュだったら key/value をセパレータで繋げた配列を返したり・・・
そこまでやって、初めて arraylize を名乗っていい。
そう思うんだ。

どうでもいいけど

295 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 13:37:18 ]
to_arrayじゃダメなん?

296 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 14:12:49 ]
ありがとうございます
単純にfile2arrayにします

エラー処理や
ファイルハンドルに$fh、
そこのところ貰います


297 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 14:42:16 ]
my %tmp;
@tmp{qw(foo bar baz)} = split(/,/, $_, 3);
push(@result, \%tmp);

みたいなコードがあるんですが、これを %tmp を使わずに一行で済ます書き方ってあるでしょうか。
mapあたりでできそうなんだけど思いつかない…
(foo, bar, baz, 1, 2, 3) なリストを (foo, 1, bar, 2, baz, 3) に変換する関数があればいいんだけど。

298 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 14:51:29 ]
>>288
わざわざ作らんで

use File::Slurp;
my @list = read_file("list.dat");

しなよ。

299 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 14:58:34 ]
>>297
> (foo, bar, baz, 1, 2, 3) なリストを (foo, 1, bar, 2, baz, 3) に変換する関数があればいいんだけど。

List::MoreUtilsになにかあるんじゃ

300 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 15:01:31 ]
perl -e "print ((qw(foo bar baz),split(/,/, 'xxx,yyy,zzz'))[map{$_,$_+3}(0..2)]);
fooxxxbaryyybazzzz
あんまやるもんじゃないな

301 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 16:11:01 ]
頭がおかしくなりそうだ
TMTOWTDIと言うけど、杉樽歯泳場猿画五都市と言う名言もあるし

302 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 16:17:03 ]
>>297

use List::MoreUtils qw(zip);

$_ = '1,2,3';
push @result, {zip @{[qw(foo bar baz)]}, @{[split /,/, $_, 3]}};

303 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 16:23:58 ]
>>299
おお! と思って List::MoreUtils の pairwise や mesh が使えるかと思って試してみました。
が、一旦変数に入れないとARRAYとして解釈してくれずダメでした…

#NG
print mesh qw(foo bar baz), (split(/,/, "1,2,3")); # compilation errors

#OK
my @array1 = qw(foo bar baz);
my @array2 = split(/,/, "1,2,3");
print mesh @array1, @array2;



304 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 16:25:12 ]
>>302
入れ違いになりました。
素晴らしい。使わせていただきます。ありがとうございます。

305 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 16:35:48 ]
>>297
>(foo, bar, baz, 1, 2, 3) なリストを (foo, 1, bar, 2, baz, 3) に変換する関数があればいいんだけど。
変数一つ作っていいならこんな関数かな

my @arr = ('foo', 'bar', 'baz', 1, 2, 3);
my $half = $#arr / 2;
my @result = map { +($arr[$_], $arr[$_ + $half + 1]) } (0 .. $half);

306 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:07:39 ]
>>302
いったん無名配列への参照[]にして
それを@{}で、参照先の配列に戻して渡している
という理解でいいのかな?

307 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:10:34 ]
>>306
そだね
ttp://perl-users.jp/articles/advent-calendar/2008/14.html

308 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:12:08 ]
>>305
なんで3行で済ます方法を書いたの?

309 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:14:06 ]
>>308
二行だろ

310 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:18:09 ]
>>308
何揚げ足とろうとしてんのw

311 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:32:43 ]
perl -e "print join',', map{(qw(foo bar baz))[$_],(split /,/, 'xxx,yyy,zzz')[$_]}(0..999);#十分に大きい値
foo,xxx,bar,yyy,baz,zzz
>>300よりはマシかなあ…

312 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:51:55 ]
>>305
sub zip{ map { $_, shift @{$_[1]} } @{$_[0]} }
print zip [1,2,3],[4,5,6] ;



313 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 18:02:25 ]
perl -e '@array = qw/xxx yyy zzz 1 2 3/; print map { $array[$_] => $array[$_ + @array / 2] } (0..($#array / 2));'



314 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 21:28:38 ]
>>293
ヒント:シノラー

315 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 22:52:02 ]
TwitterのAPI叩くにはどうすればいいですか
Net::Twitterとかじゃなくて、純粋にHTTP使ってその辺から学習したいのです

316 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:18:20 ]
usy.jp/twitter/index.php?Twitter%20API#ga975f17
サンプル集

317 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:51:12 ]
use Net::Twitter;
役にたたなかった

318 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 19:37:45 ]
win32でパスを含めて 256 バイト以上のファイル
www.namazu.org/ml/namazu-win32-users-ja/msg01951.html

この問題ってもう解決されています?

319 名前:デフォルトの名無しさん [2010/05/11(火) 00:00:10 ]
Perlのファイル読み込みと配列格納について質問があります。
エクセルから出力した行列状態になっているcvsファイルをPerlに読み込ませて、
@a、@b、@cにそれぞれの行のデータを格納したいです。
なので、二次元配列のようなことをしないといけないと思うのですが、
Perlで二次元配列のような処理をするにはどうすればよいのでしょうか?
また行列状態になっているファイルを配列に格納する他の良い方法はありますでしょうか?
よろしくお願いします。



320 名前:319 [2010/05/11(火) 00:14:07 ]
追記です。このような内容のファイルを扱っています。

1 Takehara Shinji 500 600 1300
2 Hatakeyama Takanori 569 795 1560
3 Kouki Kameda 785 889 2695
4 Daiki Kameda 758 784 9000
5 Tomoki Kameda 580 120 984

そして、左から4行目〜6行目にある数値を縦に、
@a、@b、@cに格納し、
$a[0] を参照すると、500
$a[1] を参照すると、569
$b[0] を参照すると、600
$b[1] を参照すると、795
$c[0] を参照すると、1300
$c[1] を参照すると、1560
といった具合にしたいです。

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でいいじゃん。
短いし。






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

前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