トップページ⇒php
1001コメント296KB

Perlコーディング初心者質問スレ Part 58

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/08/06(水) 22:54:32ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1203935151/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0172nobodyさん2008/09/09(火) 16:09:27ID:???
>>171
ここで聞けば答えてくれる人がいるのだから、マニュアルを読まない人が
いても不思議ではない。
0173nobodyさん2008/09/09(火) 16:11:52ID:???
でも英語で見逃す、訳し間違えることはよくある俺。
0174nobodyさん2008/09/09(火) 16:14:58ID:???
>>173
貴殿は、自らを成長する存在と見ておらぬのか?
0175nobodyさん2008/09/09(火) 16:16:31ID:???
マニュアル読まないやつは叩くのが回答者の嗜みだろ。
答える答えないは別として。
0176nobodyさん2008/09/09(火) 16:21:23ID:???
初歩的すぎるのか、ここら辺、CGI.pm関連ページでもあまり触れられないし、
start_xxx
end_xxx
ってパターン知らないと、調べるにもその先が広がらないよね
0177nobodyさん2008/09/09(火) 16:28:12ID:???
それでも一瞥したら目に入ると思うが。

初心者が手にするような入門書には書いてないのかもしれないな。
初心者は入門書がマニュアルだから。
入門書に書いてなければ、即質問。
0178nobodyさん2008/09/09(火) 20:55:13ID:???
Perl のマニュアルを見るには perldoc コマンドを使います:

perldoc perl

モジュールのマニュアルを見るには perldoc の引数にモジュール名を与えて実行します:

perldoc CGI

# 今回のケースはこのコマンドで表示される内容のうち、"SPECIAL FORMS FOR IMPORTING HTML-TAG FUNCTIONS" という節に載っています。

perldoc の使い方も perldoc で調べることができます:

perldoc perldoc

以上、初心者のための perldoc 入門でした。よろしくご活用下さい。
0179nobodyさん2008/09/09(火) 21:25:32ID:???
rubyにユーザー数抜かれたくせに
態度でかいな。
0180nobodyさん2008/09/09(火) 23:58:37ID:???
ユーザー数・・・?
0181nobodyさん2008/09/10(水) 09:33:06ID:???
x:xxxxxxx>perldoc
'perldoc' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

Pathが通ってなかったOracle10g付属Perl
Pathを通すと動くようになった
0182nobodyさん2008/09/10(水) 13:01:51ID:???
winか。じゃあ仕方ない。
0183nobodyさん2008/09/10(水) 13:10:53ID:Ln4PKjnA
perldoc CGI.pm

ってやって出てくる1ページ目にものすっごいヒントがあるじゃないw

NAME
  CGI - Simple Common Gateway Interface Class

SYNOPSIS
   # CGI script that creates a fill-out form
   # and echoes back its values.

   use CGI qw/:standard/;
   print header,
      start_html('A Simple Example'),
      h1('A Simple Example'),
      start_form,
      "What's your name? ",textfield('name'),p,
      "What's the combination?", p,
      checkbox_group(-name=>'words',
              -values=>['eenie','meenie','minie','moe'],
              -defaults=>['eenie','minie']), p,
      "What's your favorite color? ",
      popup_menu(-name=>'color',
            -values=>['red','green','blue','chartreuse']),p,
      submit,
      end_form,
      hr;
0184nobodyさん2008/09/10(水) 13:30:20ID:???
WindowsでもActivePerl入れれば、perldocもHTML版もきっちり入る。
0185nobodyさん2008/09/10(水) 14:12:03ID:???
英語が苦手な人は、perldoc.jpを見ればいいかも

CGI - 簡単なCGI(Common Gateway Interface)クラス
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
0186nobodyさん2008/09/10(水) 16:22:39ID:???
WindowsでもActivePerl入れられない環境もあるよ
直前に出ているOracle Server入ってる環境もOracleのPerlと競合して入れられない。
(入れられはするが環境変数が競合して可笑しな動きをする)

コマンドが使えるかどうか、使えなければ、PATHを通ってなければ通すとかすれば使えるから、そっちをやると良い
0187nobodyさん2008/09/10(水) 16:32:00ID:???
SQLインジェクションの対策のエスケープ処理について質問です。
mysqlで勉強してます。文字コードはsjisです。
1、「’、<」などの通常の特殊文字のエスケープ
2、sjisどうしても使う場合は「SELECT 〜$str 〜」のSQL文の中で使う
 すべての文字列をEncode::from_to($str, "sjis","sjis");
 毎回これ何個もずらりと書くの大変です。
 mysqli_real_escape_string()関数も同様に毎回ですよね。

質問です。
・1だけの処理で簡単に終わらせることは可能でしょうか?
 可能でしたらどの文字をどうしたらよいのか知りたいです。
・2をすれば対策になっていますか?
よろしくお願いします。
0188nobodyさん2008/09/10(水) 16:37:22ID:???
>>187
1.
プレースホルダ使えよ

2.
SJISは知らん。多分はまり道なので避けられれば避けたほうがいいような
気はするが避けようがないなら....まあ、頑張れ。
0189nobodyさん2008/09/10(水) 17:07:20ID:???
inputとoutputで処理をかませる
0190nobodyさん2008/09/10(水) 21:12:56ID:???
>>187
それを行うライブラリを書いたらいいんじゃないかな。
それがたとえ既存の車輪だとしても、勉強になるし便利になるし安全…かどうかは中身次第だけど、少なくともメインプログラムの行数が減ればバグも減る。
0191nobodyさん2008/09/11(木) 03:45:37ID:???
IPAの声は届かないもんだね。
http://www.ipa.go.jp/security/vuln/websecurity.html

昔から疑問に思ってたんだけど、
プレースホルダ使った方が楽で確実なのに、
エスケープで通す利点ってあるの?
01921872008/09/11(木) 04:05:18ID:???
>>188-190
IPAの解説書にプレースホルダか一つずつエスケープ処理する
対策があるみたいですね。
意識しないでquote()使っていたので大丈夫のようです。
今度からは、プレースホルダも使ってみたいと思います。
ありがとうございました。
0193nobodyさん2008/09/11(木) 12:02:32ID:???
inが使いたいときに困る>プレースホルダ
0194nobodyさん2008/09/12(金) 06:22:07ID:???
>>193
where ... in (...) ってやつ?

my @fields = ( ,,, );
my $query = sprintf("select ... from Table where ... in(%s)", join(',', ('?')x@fields));
my $sth = $dbh->prepare($query) or die $dbh->errstr;
$sth->execute(@fields);

こんな感じで特に問題ないと思う。
0195nobodyさん2008/09/13(土) 14:59:35ID:D0b2LLIL
cgi で、パラメタ文字列中の「+」(プラス)を拾いたいのですが、うまい方法はないでしょうか。
hoge.cgi?key=ab+cd で「ab+cd」という値として受け取りたいのです。
CGI::Lite, CGI::Simple, CGI::Minimum などは、皆「ab cd」と空白に変換してしまいます。
0196nobodyさん2008/09/13(土) 15:06:54ID:???
普通は%2Bにエスケープする
0197nobodyさん2008/09/13(土) 15:08:31ID:???
えーと、受け取る時ですが。
0198nobodyさん2008/09/13(土) 17:12:54ID:???
"+"はブラウザが%2Bにエンコードして送ってくる。
" "はブラウザが"+"にエンコードして送ってくる。

> hoge.cgi?key=ab+cd で「ab+cd」
として受け取りたいなら、RFC書いて、各ブラウザを改良させて、モジュールを修正する。

まぁ、頑張ってくれ。
0199nobodyさん2008/09/13(土) 17:21:39ID:???
URLのエスケープで半角スペースを「+」に変換するのが仕様なんだから、
「+」をその文字のままで扱いたかったら、>>196の言う通り
送り側が%2Bとエスケープしてからサーバーに送らんといかん。

どうしても「+」(送り側は半角スペースのつもり)のままで受け取りたいなら、
モジュールの中身を改造するか、自前で引数受け取り、デコード用の処理を書くかするしかないんじゃないの。
0200nobodyさん2008/09/13(土) 21:31:17ID:???
$ENV{'QUERY_STRING'} =~ s/\+/%2B/g;

逃げ道はあるけど、うまい方法だと思われても困る。
0201nobodyさん2008/09/14(日) 20:04:01ID:???
正規表現で
dddから始まる行を、置換で削除したいです
(下記の場合dddeeeが該当)

aaa
bbb
ccc
dddeee
fff

検索:ddd[a-z]
置換:\n
だとうまく置換されません
なぜ??
0202nobodyさん2008/09/14(日) 20:11:49ID:???
^ddd.+
0203nobodyさん2008/09/14(日) 20:46:53ID:???
s/^ddd.*?$// ;
0204nobodyさん2008/09/14(日) 21:26:37ID:???
ム板の正規表現スレ向けのお話じゃないのかな。

Perl でやってるんだったら「こう書いてるけどうまく行かない」も書きましょう。
<$fh> =~ s/ddd[a-z]/\n/g; # うまく行かない
02052012008/09/14(日) 21:26:47ID:???
ありがとうございました
解決できて嬉しいです。
0206nobodyさん2008/09/18(木) 23:04:37ID:???
$data = "MAILADDR=<入力したメールアドレス>\n PASSWORD=<入力したPW>\n";
if (open(FH, ">data.bat")) {
print FH $data;
close(FH);

↑CGIを使用しページを見ているユーザーに入力を求め、<入力したメールアドレス><入力したPW>に代入?させてファイルに書き出したいのですがいい方法ってありますか?
0207nobodyさん2008/09/18(木) 23:19:12ID:???
1. メールアドレスとPW(?)を入力するフォームを作る。
2. そのフォームを受け取って、ファイルに書き出すスクリプトを作る。
0208nobodyさん2008/09/18(木) 23:52:53ID:???
一行にしておいた方が後で色々楽じゃね?
0209nobodyさん2008/09/19(金) 13:28:02ID:J2CRWlwv
>117=119
亀レスですが。
あんまりスマートじゃないけど、こんなんでどうですか? fasta形式のファイル読み込むようになってます。
BioPerl使った方がいいのかもしれませんが、私はよく知らないので・・・ テキトーに参考になさってくだされば幸いです。

ところで、ついでに質問させていただきます。 15行目の$1を22行目のprintの中に入れると、 Use of uninitialized valueのエラーが出るのですが、 これはなぜでしょうか?
お分かりになる方いらっしゃいましたら教えて、いただけますでしょうか?

>sequence1 NIDA
atgaccaccg aaacaaccgg acaccggcac acagctgacg cgaccgatcc ctacctgcgg 60
cgcgcgttgc gggaggtagc ggacgggctc aaggtcgggc gcttaccggc ccgcgtcgtc 120
>sequence2 MONA
gcttagccct aaacctcagt agttaaaaca acaaaactac tcgccagaat actacaagca 60
acagcttgaa actcaaagga cttggcggtg cttcacatcc ccctagagga gcctgtccca 120

したにつづく
02102092008/09/19(金) 13:28:56ID:J2CRWlwv
209のつづき

1 #!/usr/bin/perl
2 use strict;
4 use warnings;
6 open (my $fh,'<','fastafile.txt') or die "cannot open file\n";
8 $/ = '>'; #セパレーターを\nから変更
9
10 my @sequences = <$fh>;
11 shift @sequences; #要素数0は空だから削除
12
13 for (@sequences) {
14  s/^(.+)\n//; print ">$1\n";  s/\d|>//g;
17 #カウントとマッチしたところを大文字に 
18  tr/ATGCU/atgcu/;
19  my $TAG = $_ =~ s/tag/TAG/igm;
20  my $TGA = $_ =~ s/tga/TGA/igm;
21  my $TAA = $_ =~ s/taa/TAA/igm;
22  print "$_ UAA:$TAG\n UAG:$TGA\n TAA:$TAA\n\n\n";
23 }
0211nobodyさん2008/09/19(金) 13:53:37ID:???
おれの目には15行目が見えんぞ
02122092008/09/19(金) 13:56:08ID:J2CRWlwv
>211
すいません。
改行制限に引っ掛かったので、14行目にまとめてました。

14  s/^(.+)\n//;
15 print ">$1\n";
16  s/\d|>//g;
0213nobodyさん2008/09/19(金) 17:07:37ID:???
>>209
$1 は、次に正規表現が呼ばれた際にクリアされる。当然、15行目の $1 は 16 行目には
クリアされているので、22 行目で print 出来るわけない。のはいいとして、、、
- 普通 fasta format には塩基数表示なんか無い。同様にスペース区切りも入らない。
 もしあなたがそれを常用しているのなら、今すぐ止めた方が良い。
 それは「 fasta format の様なもの」にしか過ぎない。
- さらにスクリプトの方では、塩基配列中の空白、改行が残る為 「 TA A 」などのケースを逃す。
 (空白は通常の fasta format を想定してるならそれでも良いがそうなると s/\d|>//g; が謎。
 改行の除去忘れは重大)
- local せずに $/ ='>' するのはスクリプトが大きくなった時、混乱を招くのでお勧めしない。
- frame 無関係に終止コドンの数を数えてどーすんの?

以下、引数に multi fasta、cds(DNA 配列) frame 毎の終止コドンの数を単純に数える場合。
# エラー処理など割愛、インデントは全角空白
sub cnt{
 # sequence を 3base 区切りにし、table と照合し、該当数を帰す。
 my %table = %{ shift @_ } ;
 ( my $seq = shift ) =~ s/(.{1,3})/$1 /g ;
 return scalar grep { $table{$_} } split /\s+/, $seq ; # hit 無しの場合は 0 が帰る
}
my %stopcdn = qw( TAA 1 TAG 1 TGA 1 ) ;
# file を丸呑みした後、/(?=^>)/m にて split し、無名配列として回す。
for ( split /(?=^>)/m, do{ local $/ ; <> } ) {
 s/^>(.*?)$//m ; my $name = $1 ; s/[\n\r\s]//g ; my $seq = uc ; # ごにょごにょ調整、大文字化
 # frame 順に cnt させ、その結果をプリント。
 printf "%s\tframe%d\t%d\n", $name, $_ + 1, cnt \%stopcdn, substr $seq, $_ for 0 .. 2 ;
}
02142092008/09/19(金) 18:44:46ID:???
>>213
添削ありがとうございます。
半端な知識で回答してしまって申し訳ないorz
>>117氏を混乱させるとこでした。
出直してきます。
0215nobodyさん2008/09/20(土) 07:08:55ID:???
http://www.dotup.org/uploda/www.dotup.org2038.zip.html

ゲームの得点ランキングを作ろうと思い、
名前・得点・コメントを入力してランキングに登録するといった形のものを作りたかったのですが、
値を入力し、送信してもうまく表示されません。
logのファイルに書き込みはできてるみたいですが、正しくかけていないように思えます。

どうすればランキングを表示できるでしょうか?
もうどこが間違ってるのか分からなくなってしまいましたので、アップロードさせていただきました。
どなたか修正・ご指導よろしくお願いします。
02162152008/09/20(土) 07:44:46ID:???
http://www.dotup.org/uploda/www.dotup.org2048.zip.html
URLミスです。こちらでお願いします。

http://www.cgi-web.net/download-top.html様の
quizというCGIを元に改造してみたものです。

よろしくお願いします。
0217nobodyさん2008/09/20(土) 08:09:35ID:???
>>215
めんどい。
はい、次。
0218nobodyさん2008/09/20(土) 08:23:17ID:???
※ 修正は有料にて承ります。
0219nobodyさん2008/09/20(土) 08:39:59ID:???
このあたりのはんちゅうじゃないのかな?

★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc11.2ch.net/test/read.cgi/php/1143834740/
02202152008/09/20(土) 18:44:01ID:???
わかりました。そちらで聞いてみます。
ありがとうございました。
0221nobodyさん2008/09/21(日) 08:39:11ID:???
パソコンの中でCGIを動かしたいんだけど、
どこの解説ページを見ればいい?

XAMPPと自分でインストールしたアパッチで、
もう、通常のHTMLファイルと、PHPは
動くようになってます。

PerlもActivePerlでDOSプロンプトのコードは
動くようになってます。

あと、たぶんアパッチの設定だと思うんですけど。
0222nobodyさん2008/09/21(日) 09:04:26ID:???
>>221

Options ExecCGI
AddHandler cgi-script .cgi .pl
0223nobodyさん2008/09/21(日) 10:49:20ID:???
XAMPPをインストールしてあるんよ。
それで、普通のhtmlファイルは表示できるし、
http://localhost/1/1.htmlとかで。

そんで、PHPのファイルも実行できるんよ。
http://localhost/xampp/

そんで、今、パソコンの中に、
ActivePerlがインストールされているんだけど、
さらに、xamppのホームページにある、
perlのアドオン、ていうのをとってきて、
インストールしないとだめなのかなぁ?って思って。

でも、そんなことしたら、自分のパソコンの中に、
activeperlと、xamppのperlと、二つのperlが混在することに
なりますよね。それでいいのかなぁ?と。
0224nobodyさん2008/09/21(日) 10:51:02ID:???
やりたいことは、perlでCGIのファイルを作って、
自分のパソコンの中で動かすこと!

で、アパッチはたぶん、xamppのアパッチを使えばいいと
おもうんだけど、perlは、前から使ってるactiveperlで
いいのかな?って。

その場合、何か設定は必要なの?

その場合、その設定は、xamppの、アパッチの、
httpd.confに対して行うの?
0225nobodyさん2008/09/21(日) 10:59:17ID:???
できた。

できた。できた。できた。できた。できた。できた。できた。できた。できた。できた。できた。

ボクのパソコンの中でハローワールドが動いた!!!!!!!!!!!!!
0226nobodyさん2008/09/21(日) 11:10:05ID:???
>225
忘れていたものを思い出させてくれた
0227nobodyさん2008/09/21(日) 14:44:46ID:???
文体からomotiを思い出した
0228nobodyさん2008/09/21(日) 18:53:27ID:???
忽然と消えたomoti
0229nobodyさん2008/09/21(日) 21:55:27ID:???
ム板のCLI日記に加えてCGI日記も始まるのか。
0230nobodyさん2008/09/21(日) 23:12:41ID:???
そっとしておいてやれ。
0231nobodyさん2008/09/22(月) 02:52:25ID:???
警察に通報しました。
0232nobodyさん2008/09/26(金) 08:48:40ID:???
flockって何回かトライする必要はないのでしょうか?

for (1..5) {
flock(FH, 2) and last;
sleep 1;
}
0233nobodyさん2008/09/26(金) 10:00:49ID:???
ない
0234nobodyさん2008/09/26(金) 10:12:12ID:???
mkdir|symlink がうまく行くまで5回ぐらい試すスクリプトの妙な影響かな。
0235nobodyさん2008/09/26(金) 11:15:27ID:???
ロック取得できない時に早期にエラー返す必要があるとか
いくつかのファイルのうちどれかでロックが取得できればいい場合に
LOCK_NBつけて、場合によってはループまわすことはあるが
普通に使ってる分にはそんな事する必要もない
0236nobodyさん2008/09/26(金) 11:25:11ID:???
そもそもflockの処理からタイムラグを億法が危険だと思う。
0237nobodyさん2008/09/26(金) 11:27:33ID:???
詳しく
0238nobodyさん2008/09/26(金) 12:15:18ID:???
複数回トライいらないんですね。
了解しました。
0239nobodyさん2008/09/26(金) 13:37:22ID:???
ユーザーフレンドリーで考えるなら何回かトライしてあげたほうが優しいよね
0240nobodyさん2008/09/29(月) 01:27:41ID:???
ブラウザでオンライン対戦できるゲームを作っています。
規模が大きくなるにつれてファイルを分割したのですが、
モジュールが呼び出し元のパッケージの変数を要求することが多く、
一々変数の前にパッケージ名をつけなければならないのが非常に面倒です。
mainパッケージの変数を簡単に呼べるようにno strictしたりもしましたが、
こうするとコードを書く効率が悪くなります。

何か解決法は無いでしょうか?モジュールの分割の方法が下手なんでしょうか。
0241nobodyさん2008/09/29(月) 01:39:41ID:???
くれぐれも共有サーバでやるなよ
0242nobodyさん2008/09/29(月) 01:53:46ID:???
>>240
わざわざ名前空間を明示しない意味がわからない

例えば新宿駅で、京王線のホームで駅員を呼んだら京王線の職員が駆けつけてくれたのに
「JRの職員が来ないのはなぜだ!!(#゚Д゚)」と言ってごねている人を君はどう思うか・・・

八王子市内から市外局番なしで電話をかけておいて、「03局に繋がらない!!(#゚Д゚)」と言って
NTTにクレームを付ける人をどう思うか・・・
0243nobodyさん2008/09/29(月) 04:50:42ID:???
コマンドプロンプトの引数に関する質問です。
以下のようなプログラムをtest.plとして保存し、プロンプトから
>perl test.pl hoge hugaと実行すると引数が想定どおりに表示されていきますが
>test.pl hoge hugaとすると何も表示されません。
拡張子.plはperl.exeと関連付けられているので実行はされるんですが、引数がうまくわたっていないようです。
後者の場合でも引数が表示されるようにするにはどうすれば良いでしょうか教えてください。

$i = 0;
foreach (@ARGV) {
print "$i:$_\n";
$i++;
}

環境:WindowsXPとActivePerl v5.8.8
0244nobodyさん2008/09/29(月) 09:02:48ID:???
それは壊れてるね
廃棄するしかないですね
0245nobodyさん2008/09/29(月) 10:17:10ID:???
>>243
関連付けが間違ってるか、Windowsが壊れたかのどっちか。
うちのWindowsは、たまに関連付けが壊れるので困る。

C:\Perl\bin\perl.exe "%1" %*
0246nobodyさん2008/09/29(月) 14:38:34ID:???
640×480の画像をアップロードした時に、同時に160×120のサムネイル画像も作成するプログラムを組んでいます。
それで画像のリサイズはImage::Magickで何とかなったんですが、作成後の容量がかなり大きくなります。

元の画像が100KBに対して、サムネ画像は30KBくらい。
quality値を下げても、画像が劣化するだけで容量がほとんど変わりません。

解像度はこれ以上落とせないとして、何か容量減らす方法って何か無いでしょうか?
理想は10KB以下で、画像の劣化は多少は諦めます。

どなたか分かる方がいればお願い致します。
0247nobodyさん2008/09/29(月) 15:59:15ID:???
resize => thumbnail

どういうコード書いてるかエスパーじゃないからわからないけど小さくするのにresize関数
使ってるとか?
0248nobodyさん2008/09/29(月) 17:18:36ID:???
説明不足ですいません。
resizeで画像を小さくした後、Setで画質を下げてます。

以下ソース。

$gazouはアップされた640×480の画像です。


use Image::Magick;

$image = Image::Magick->new;
$image->Read("$gazou");

$image->Resize(width => 160,height => 120);
$image->Set(quality=>50);

$image->Write("$gazou2");
02492472008/09/29(月) 18:00:47ID:???
$image->Scale(width=>160, height=>120);
$image->Sample(width=>160, height=>120);

thumbnailって関数あったと思ってたけどぐぐっても見つからなかった
ScaleかSampleだったかな
とにかく画像の容量は境目が鮮明なほど大容量になるから普通はぼかし入れてサイズ変更
することで容量がコンパクトに収まる。確かResize関数はそれをやってなかったから脹れる
0250nobodyさん2008/09/29(月) 18:08:53ID:???
手元にあったサムネール作成するコードはこんな感じ
return $rc if $rc = $image->Read( $_[0] );
my($width,$height) = $image->Get( 'width' , 'height' );
return $rc if $rc = $image->Thumbnail( width => $WIDTH , height => $height * ( $WIDTH / $width) );
return $rc if $rc = $image->Write( $_[1] );
0251nobodyさん2008/09/29(月) 18:29:54ID:???
Thumbnailメソッドはあるよ。

JPEG使えばquality=>50で大体10k切れると思う。
02522462008/09/29(月) 20:17:47ID:???
皆様コメントありがとうございます。

>>250を参考に、>>248のソースの中のこの行を、
$image->Resize(width => 160,height => 120);

$image->Thumbnail(width => 160,height => 120);

こう変えてみたのですが、エラーも何も出ずに処理が中断されました。
ちなみにResizeをScaleとSampleに変えた場合は、いちおう画像は作成されましたがResizeと同じような容量でした。

ひょっとしてサーバーが対応してないのかな…
02532512008/09/29(月) 20:25:35ID:???
華麗にスルーされた(笑
せいぜい頑張りたまえ。
02542462008/09/29(月) 20:36:42ID:???
>>253
すいませんw
でも元々の画像は全てjpgで統一してるので、あとはThumbnailが動けばいいんですが…
0255nobodyさん2008/09/29(月) 21:54:40ID:???
>>253はすでに書いてあることしか書いてないじゃん
そりゃスルーされるわ
02562512008/09/29(月) 22:15:24ID:???
>>255
Image::Magick使ってから発言してるか?
160*120ドットにResizeして、JPEG,Quality50でWriteするだけで、10KB以下になるぞ。
02572512008/09/29(月) 22:20:16ID:???
つーか、160*120の8bitカラーとして非圧縮で19,200バイトなんだから、
GIFで圧縮したとしても、15KB程度ぐらいには圧縮可能だろうさ。
0258nobodyさん2008/09/29(月) 22:24:21ID:???
>246
今回の場合とは違うかもしれないが、自分も似たような症状でハマったことがある。
原因は、画像に含まれるコメントなどの付加情報だった。

Thumbnailなら消えるのかな?
02592512008/09/29(月) 22:30:58ID:???
だとしたら、Write前にStripかませば潰れるってことか。
0260nobodyさん2008/09/29(月) 22:31:22ID:???
>>256
お前は Image::Magic しか使ってないのか?
画像書き出しの基本を自慢気に書くなよ恥ずかしい
02612462008/09/29(月) 22:56:00ID:???
何かいろいろと荒れる原因を作ってすいません…

結果から言うと無事に減量に成功しました。
>>258さんの言う通り余計な情報が入ってたからみたいで、

$image->Profile();

このコマンドを使って付加情報を消してみまたところ、元が200KBの画像もQuality75で4KBほどに落ちました。
>>251さんの言うStripも試してみましたが、サーバーが対応してないのかしてエラーが…

何かあまりよく無い方法かもしれないけど、とりあえず減らせたのでこれでいってみようと思います。
本当はThumbnailが使えたら一番良かったんだろうけど…

皆様、どうもありがとうございました。
02622582008/09/29(月) 23:41:26ID:???
>261
お。そりゃえがった
0263nobodyさん2008/09/30(火) 11:08:00ID:???
thumbnailもstrip無いってよほど古いVersionなのか?
くっついてるライブラリの問題?
02642462008/09/30(火) 14:15:08ID:???
>>263
ロリポップですorz
多分かなりバージョンが古いと思います。

ローカルのサーバーだとImage::Magickの最新版入れたからどっちのコマンドも使えるんだけど…
逆にProfileがエラーで使えず。

このどっちつかずの状態が非常に面倒だw
0265nobodyさん2008/09/30(火) 16:09:35ID:???
常に最新ライブラリが使えるなんて、自前鯖で自力で入換えできる人しか使えないと思った方が良いよ
0266nobodyさん2008/09/30(火) 16:40:02ID:???
管理者にメール投げれば対応してくれることもあるけど、期待はしない方が無難
0267nobodyさん2008/09/30(火) 18:15:01ID:WMNZymKE
perl勉強したらperlでwindowsアプリケーションもつくれますか?
0268nobodyさん2008/09/30(火) 18:50:21ID:???
作れる
Win32API も呼べる

http://www.google.co.jp/search?num=100&hl=ja&safe=active&client=firefox&rls=org.mozilla%3Aja%3Aofficial&hs=6gw&q=perl+Windows+GUI&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja
02692442008/10/01(水) 05:05:58ID:???
>>245
assoc .pl=Perl
ftype Perl=C:\Perl\local\bin\perl.exe "%1" %*

と何度かしているうちに直った
ありがとう
0270nobodyさん2008/10/03(金) 14:04:41ID:???
PHPのように、Perlの記述をHTMLに埋め込むようなことを実現するライブラリ、
もしくはモジュールはありますでしょうか?
0271nobodyさん2008/10/03(金) 14:23:53ID:???
つApache::ASP
■ このスレッドは過去ログ倉庫に格納されています