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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん05/03/10 00:47:16ID:sT66OcmD
Perlのコーディングで困ってる人のスレです。

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

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0231nobodyさん05/03/19 22:08:29ID:???
あれ?昼に徹夜明けで帰って
さっきまでたっぷり寝たのに日本語がわかんない
今度は寝すぎかな?

0232nobodyさん05/03/19 22:14:42ID:???
>>230
return うんこ . はなくそ
0233nobodyさん05/03/19 22:17:59ID:???
理解不能 理解不能
>>228 はとりあえず要所要所スクリプトで例書いてごらんw その方わかるかもw
0234nobodyさん05/03/19 22:51:45ID:???
いや、もういいです
つまんないネタになるだけだと思うので
お邪魔しました
0235nobodyさん05/03/20 00:27:27ID:???
自分の日本語がおかしくないとでも言いたげだな。
0236nobodyさん05/03/20 00:33:08ID:???
まあまあ。(*´∀`)ノ
0237nobodyさん05/03/20 02:15:24ID:???
while (1) {
  print "Hello Unko World!\n";
}
0238nobodyさん05/03/20 03:10:16ID:???
"unknown world" と "unko world" は若干似ている
0239nobodyさん05/03/20 03:22:48ID:???
つ●
0240nobodyさん05/03/20 11:54:57ID:???
>>228
datファイルに書き足していきたいだけだろ?
ファイル操作のあたりを調べてみなさい。

それとテスト環境を作って自分で色々試しなさい。
どうせサーバーで直接試してるんだろうから。

0241nobodyさん05/03/20 13:14:23ID:RNFnJUaq
perlでCGIを作成しております。手元のWindowsXP+Appache+Perlで開発&
動作確認後、サーバーにアップロード、という手順で開発してるのですが、
perlスクリプトの一行目のperlスクリプトの指定を、

#!c:/Program Files/perl/bin/perl

から、アップロードの時だけいちいちサーバのパス指定に合わせて

#! /usr/local/bin/perl

と書き換えています。結構面倒だし、変更を忘れてエラーになることも
しばしばです。何かスマートな方法があるのではと思ってるのですが、
アドバイスいただければ幸いです。



0242nobodyさん05/03/20 13:30:13ID:???
C:\usr\ に perl インストールすればいいよ。俺はそうしてる。
0243nobodyさん05/03/20 14:04:16ID:???
>>241
Apache 1.3.xなら、.cgiの拡張子をPerlに関連付けすると、
シェバングパスを無視して実行してくれる。
私はそうしてる。
0244nobodyさん05/03/20 15:17:59ID:???
>>241
>>242
0245nobodyさん05/03/20 16:24:18ID:???
俺漏れも
0246nobodyさん05/03/20 17:22:51ID:Z0GAs5yv
Perlで設定ファイルを編集する、という処理をしています
編集画面はしっかり編集されるのですが編集を実行すると
$params{'body'}の値が数字になってしまいます
$params{'body'}の部分にはタグも表示できるようにしてあるのですがそれが関係しているのでしょうか
三日三晩眺めてみてもどうしてもわかりません…
ご教授お願いします。
0247nobodyさん05/03/20 17:26:02ID:???
sub top {
my $kugiri = "<<>>";
if ($params{'pass'} ne $pass) { &error("パスワードが違います"); }

# 編集
if ($params{'c'} eq "topedit") {
if (!$params{'body'}) { &error('入力がありません'); }

$params{'body'} =~ s/\r\n/\n/g;
$params{'body'} =~ s/\r//g;
$params{'body'} =~ s/\n/<br>/g;
$params{'body'} =~ s/&/&/g;
$params{'body'} =~ s/</</g;
$params{'body'} =~ s/>/>/g;
$params{'body'} = ~s/"/\"/g;
open(OUT,">setup.dat") || &error("setup.datを開くことができません");
print OUT "$params{'body'}$kugiri$params{'title'}$kugiri$params{'text'}$kugiri$params{'bgcolor'}$kugiri$params{'link'}$kugiri$params{'vlink'}$kugiri$params{'alink'}$kugiri";
close(OUT);

# 完了
&head;
print "<b>設定完了</b>\n";
&footer;
exit;
}
0248246-24705/03/20 17:26:57ID:???
open(IN,"setup.dat") || &error("setup.datを開くことができません");
$file = <IN>;
close(IN);

($body,$title,$text,$bgcolor,$link,$vlink,$alink) = split(/$kugiri/, $file);
$body=~s/<br>/\n/ig;
$body=~s/&/&/g;
$body=~s/</</g;
$body=~s/>/>/g;
$body=~s/\"/"/g;

&header;
print <<"EOM";
編集<br>
<form action="$cgi" method=post>
<input type=hidden name=pass value=$params{'pass'}>
<input type=hidden name=mode value=top>
<input type=hidden name=c value=topedit>
<textarea name="body" rows="10" cols="50" istyle="1">$body</textarea>
<br>
$title,$text,$bgcolor,$link,$vlink,$alinkのinputフォームは割愛<br>
それときったないソースでスマソ
<input type=submit value=送信>
EOM

&foot;
exit;
}

sage忘れスマソ…_| ̄|○
0249nobodyさん05/03/20 17:58:57ID:???
勘で、この行のイコール直後のスペース
>$params{'body'} = ~s/"/\"/g;
0250T女の竹田05/03/20 18:16:49ID:???
>>246
せっかくPerlには便利なデバッガが付いてるんだから、使わないと損だよ。
三日三晩眺めてた、って。
CGIならその場で環境変数とか設定したらいいから。
0251246-24805/03/20 19:22:11ID:???
ありがとう、本当にありがとうございました_| ̄|○<ヤットネラレル…
こういうポカミスって気付かないものですね

>250
Σ(´д`)それがありましたね
今度からはしっかりそれ試してます…
ではありがとうございました
0252nobodyさん05/03/21 00:34:17ID:???
>>251
Data::Dumperを使うとかさ。
0253nobodyさん2005/03/21(月) 18:10:57ID:3f95qFz7
配列の要素の値でソートした結果のインデックスが欲しいのですが、
何かよい方法はありますか?
具体的に言いますと、
$aaa[0]='bb';
$aaa[1]='aa';
$aaa[2]='cc';

を各値で昇順ソートし場合、@result=(1,0,2) という結果が欲しいのです。

下記のコードでは、それらしい結果は得られるのですが、確信が持てないのです。

$aaa[0]='bb';
$aaa[1]='aa';
$aaa[2]='cc';

$xxx[0]=0;
$xxx[1]=1;
$xxx[2]=2;

@result=sort {$aaa[$a] cmp $aaa[$b]} @xxx;

よろしくお願いします。
0254nobodyさん2005/03/21(月) 19:48:18ID:???
>>253
@result = sort{ $xxx[$a] cmp $xxx[$b] } (0..$#xxx);
@result = sort{ $xxx[$a] <=> $xxx[$b] } (0..$#xxx);
02552542005/03/21(月) 19:50:42ID:???
頭が回ってなかった。
my @result = sort{ $aaa[$a] cmp $aaa[$b] } (0..$#aaa);
02562532005/03/21(月) 21:05:55ID:???
>>255
なるほどねぇ〜。
どうもありがとうございました。
0257nobodyさん2005/03/25(金) 22:58:43ID:???
停滞警報!? 板移転してますよ、お前ら様!?
0258nobodyさん2005/03/26(土) 00:49:49ID:???
>>257
どこに行ったか教えてくろ。
0259nobodyさん2005/03/26(土) 09:14:22ID:???
突然、どうしたのこのスレ?
0260nobodyさん2005/03/26(土) 09:17:47ID:pZwBUwH2
age
0261nobodyさん2005/03/26(土) 12:04:22ID:???
春厨大発生のこの時期に荒れてないのは喜ばしいことじゃないか。
0262nobodyさん2005/03/27(日) 02:19:06ID:eF4YrThJ
aからzまでの文字を、

aaa
aab
aac
aad
........
zzx
zzy
zzz

のように上から舐めていくのってどうすればいいですか?
0263nobodyさん2005/03/27(日) 02:46:04ID:???
for $x( 'a'..'Z'){
for $y('a'..'z'){
print "$x$y\n";
}
}
0264nobodyさん2005/03/27(日) 05:22:23ID:???
my $str = "zz";
while (++$str =~ /\A[a-z]{3}\z/) {
print "${str}\n";
}
0265nobodyさん2005/03/27(日) 06:05:15ID:???
>>262
for ('aaa'..'zzz') {
  print "$_ ";
}
0266nobodyさん2005/03/27(日) 10:11:31ID:???
>>263-264
ラクダ本読んでないってのは、怖いな。。
02672622005/03/27(日) 10:17:27ID:???
別に、たいしたことじゃない。
perlだけに時間さくわけにもいかんしな。
0268nobodyさん2005/03/27(日) 10:18:22ID:???
 ↑262 => 263ね。
0269nobodyさん2005/03/27(日) 15:26:22ID:???
おいおまいら、正直に言え。
人にラクダ本すすめといて自分で読んでないやついるだろ!
0270nobodyさん2005/03/27(日) 17:51:21ID:???
263と264は間違いなの?
0271nobodyさん2005/03/27(日) 17:56:41ID:???
>>270
perlだけに限らんけど、
there's more than one way to do it.

'aaa'..'zzz' つー記法はperlってこんなこともできるんだよスゲー、て紹介の仕方で良く引用されてるような。
02722642005/03/27(日) 19:02:20ID:???
>>266
すみません、読んだつもりだったんですが、「TMTOWTDI」しか頭に残ってませんでした。
0273nobodyさん2005/03/27(日) 19:30:00ID:???
>>269
読んだんだけどホンダアコードの話しか頭に残っていない
0274nobodyさん2005/03/27(日) 20:04:20ID:???
俺はボロボロになるまで読んだ。
0275nobodyさん2005/03/27(日) 21:30:34ID:???
俺は読んでボロボロになった。
0276nobodyさん2005/03/28(月) 00:13:11ID:???
持ってるけどほとんど読んでないorz
最近はphpばかりでCGIではPerl使わないしなぁ。
'aaa'..'zzz'はちょっと感動。

試しにベンチ取ってみた。
Benchmark: timing 10000 iterations of A, B...
 A: 3 wallclock secs ( 3.24 usr + 0.01 sys = 3.25 CPU) @ 3076.92/s (n=10000)
 B: 2 wallclock secs ( 2.16 usr + 0.00 sys = 2.16 CPU) @ 4638.22/s (n=10000)
A=>>263
B='aa'..'zz'
0277nobodyさん2005/03/28(月) 03:16:21ID:kLN9+ZWU
perlでHTMLのソースを表示するプログラムを作りたいんですが、
いろいろ調べたけどわかりません。
socketとか使うんすかね?
ちなみにサーバーは@niftyです。
もしやsocketのせい?
0278nobodyさん2005/03/28(月) 03:49:27ID:???
>>277
@niftyのせいです。あそこはな、(ry
0279nobodyさん2005/03/28(月) 12:03:12ID:???
>>269
10年以上昔の俺は赤ラクダを真剣に読んだ。当時はまだ読めた。
今青ラクダを2冊とも読み通せと言われるとちょっと辛い。

>>277
他サーバから http で get してきた HTML ファイルを表示したいのか?
ttp://oshiete1.goo.ne.jp/kotaeru.php3?q=1205000 を見る限り道は険しそうだが
0280nobodyさん2005/03/28(月) 13:44:59ID:???
データ重複チェックについて質問です。
ID(例えばdiaryとかtalkとか)を自由に登録・ID自体の編集もできるスクリプトになっています
実質カテゴリわけとかそんなかんじでしょうか。
open(IN,"$setup") || &error("開けない");
while (<IN>) {
($id,$disp) = split(/,/);
if ($id eq $in{'id'}) { &error('存在するIDです'); }
}
close(IN);
今は上記のようになっていますがこれですと
今編集しようとしている$setup内の行がマッチしてしまうわけで。
何か良い記述方法はないでしょうか?
0281nobodyさん2005/03/28(月) 13:55:54ID:???
意味ふめ。
open(IN,"$setup") || &error("開けない");
これなら読み込みしかできない。$setupのファイルは編集できない。
while (<IN>) {
($id,$disp) = split(/,/);
if ($id eq $in{'id'}) { $flag=1; &error('存在するIDです'); }
}
close(IN);
if ($flag == 1) {
open(OUT, ">> $setup") or die $!, "\n";
print "$id\t$disp\n";
close OUT;
とか。
0282nobodyさん2005/03/28(月) 13:56:45ID:???
もち、flock処理なども必要。
0283nobodyさん2005/03/28(月) 15:15:23ID:???
スマソ、かなり説明不足だった。
・データファイルは
2,説明,
1,説明,
 のようになっていて、複数登録が可能になっている(別サブルーチン)
・ID(変数は$id),説明($disp)をフォームから編集可能にしたい
 例えばID2を1にする場合にはエラー,2を2のまま編集する場合はエラーは出さないようにしたい
・現状だと編集中のIDがマッチするためエラーが出てしまう
・編集中のID以外をマッチさせる方法はないか?と考えたが上手い記述が見つからず
・スクリプトの記述方法は某有名所にかなり依存
・排他処理関係の関数は抜かし、他も簡略化しつつソースを晒してみた

ttp://yu.to/perl/up/id.txt
281氏の書き方だとflag==1の時、つまり同IDがある時編集可能になっちゃいますよね
0284nobodyさん2005/03/28(月) 15:21:44ID:???
ロックして行数覚えとけば?
0285nobodyさん2005/03/28(月) 15:32:19ID:???
>>283
つーか何がしたいのかわからんのだが

IDと説明を入力させるんだろ?で、

・ID が存在しなかったら登録
・ID が存在したら説明を上書き

ってことか?しかしそうなると

>・ID(変数は$id),説明($disp)をフォームから編集可能にしたい
> 例えばID2を1にする場合にはエラー,2を2のまま編集する場合はエラーは出さないようにしたい
>・現状だと編集中のIDがマッチするためエラーが出てしまう
>・編集中のID以外をマッチさせる方法はないか?と考えたが上手い記述が見つからず

ここらへんが意味不明なんだが
0286nobodyさん2005/03/28(月) 16:14:33ID:???
・絶望的に説明が下手
・要求仕様自体がバグってる

のどっちかな気がする。
0287nobodyさん2005/03/28(月) 16:36:20ID:???
>>279
赤ラクダに相当するのは、青ラクダ+クックブックだ!
つべこべ言わず4冊読破汁!
0288nobodyさん2005/03/28(月) 16:43:13ID:???
学習コストの高い言語ですね。
0289280=2832005/03/28(月) 18:04:51ID:???
レスありがとう
>・絶望的に説明が下手
たぶんこれだなorz
こちらのしたいことが明確に伝わらなくて申し訳ないです

>・ID が存在しなかったら登録
はまあ合ってるんだけど
>・ID が存在したら説明を上書き
はちょっと違うかな
ID自体も編集できるようにしたいのです(説明はたんなるオプションでしかないから)

※
ユーザーアカウントをWEB上で登録・編集・削除したい…みたいな。
イメージとしてはそんなかんじです。
そういうアカウントとかだと登録はもちろん編集する時もIDについては重複させるわけにはいかないので。

>284氏に助言いただいたこともあるのでもう一回組みなおしたりググったりしてみます
0290nobodyさん2005/03/28(月) 18:11:01ID:???
ID自体を編集、て結局新しい ID を登録してるのと変わんないんじゃないの?
0291nobodyさん2005/03/28(月) 18:29:41ID:???
>>289
当然といえば当然なんだが、idが変更されたかどうかを知るためには、
以前のid・新規idの2つがスクリプトに渡されなければならない。
0292nobodyさん2005/03/28(月) 18:34:40ID:???
ID が編集可能という時点で ID が identifier としての役目を果たさないわけで。
データ構造の設計から見直した方が良いんじゃないですかね?
0293nobodyさん2005/03/28(月) 19:55:25ID:TfqpURTV
ラクダ本まるまるUPしたらやっぱ捕まるの?
0294nobodyさん2005/03/28(月) 20:01:05ID:???
>>293
釣りか?聞かなくても奥付見りゃわかるだろ。
0295nobodyさん2005/03/28(月) 20:27:21ID:???
>>292
Larry没後50年まで生きてください。
0296nobodyさん2005/03/28(月) 20:28:05ID:???
めんご、>>293だた
0297nobodyさん2005/03/28(月) 21:23:02ID:???
>>280
やっと分かった。
IDは使われていない番号への変更が可能ということなんだ。
すっきり。

データ構造とファイルの扱いが分からないので、簡単に。
編集=新しいIDの登録+古いIDの削除。
または、IDをただのデータとして扱ってIDを書き換える。
0298nobodyさん2005/03/29(火) 17:27:53ID:???
便所の落書き
ラクダ本とやらを見に行ったらすんごく面白かった。

学生には高すぎるよorz
0299nobodyさん2005/03/29(火) 17:33:36ID:???
図書館で借りろ。俺はそうした。
03002802005/03/29(火) 19:10:54ID:???
うお。こんなにレスが…ありがとうございます本当に。
至らない所が多々ありすみませんでした。
最初からそう説明してればよかったのか。

結局、297氏の案+αで自分のやりたいことができるようになりました。
もちっとスキルアップしてきますorz
それでは、スレ汚し失礼しました。
0301nobodyさん2005/03/29(火) 21:35:34ID:???
すいません、push(@result{'minus30'}, $name);ということって不可能なのでしょうか?
03023012005/03/29(火) 21:44:57ID:???
言葉足りずでした。push(@result{'minus30'}, $name);とするとエラーが出てしまうのですが、
@result{'minus30'}->[]という無名配列にpush出来る方法ってないでしょうか?
0303nobodyさん2005/03/29(火) 21:54:38ID:???
push @{$result->{minus30}}, $name;
03043012005/03/29(火) 22:10:40ID:???
ありがとうございます。なるほどこうやれば良いんですね、出来ました!
ここら辺についての理解が怪しいので、もう一回勉強してきます〜。
0305nobodyさん2005/03/30(水) 18:04:36ID:???
スカラーのリファレンスのリストを引き数で渡すと
一気にデリファレンスしてくれる関数が欲しいのですが
他にも方法があったら教えてください。

#一括デリファレンス関数の定義
sub list:lvalue{@_?(${$_[0]},list(@_[1..$#_])):@{[]}}

#以下使用例
@a = \($a,$b,$c,$d,$e);

if($case){
(list(@a)) = qw(aa bb cc dd ee);
}else{
(list(@a)) = qw(AA BB CC DD EE);
}

print "$a,$b,$c,$d,$e";
0306nobodyさん2005/03/30(水) 19:45:23ID:???
>スカラーのリファレンスのリスト

@a = (\$a,\$b,\$c,\$d,\$e);
0307nobodyさん2005/03/30(水) 20:48:59ID:???
>>305
お前の釣り針に長靴引っ掛けるクマ・・・・・
0308nobodyさん2005/03/30(水) 22:07:20ID:???
>他にも方法があったら

sub list:lvalue{@_?(${+shift},list(@_)):@{[]}}
0309nobodyさん2005/03/30(水) 22:26:29ID:???
>>306
何が言いたいのかわからん。
0310nobodyさん2005/03/31(木) 05:57:08ID:???
長靴だけだった...クマめ...orz
0311nobodyさん2005/03/31(木) 06:09:24ID:???
>>305
プロトタイプ宣言したほうがいいんかも。
てか、lvalueってPerl5.6以上限定だね。

sub list(@):lvalue{@_?(${+shift},list(@_)):@{[]}}

@a = \($a,$b,$c,$d,$e);

if($case){
(list @a) = qw(aa bb cc dd ee);
}else{
(list @a) = qw(AA BB CC DD EE);
}

print "$a,$b,$c,$d,$e";
0312nobodyさん2005/03/31(木) 08:25:29ID:???
すいません、PerlでMSNメッセンジャー接続を行うモジュールを探してて
http://www.bot-depot.com/forums/?showforum=12
ここの
http://www.bot-depot.com/forums/index.php?act=Attach&type=post&id=629
これを落としたんですが、上手く動きません…。

とりあえず最新のActivePerl入れてXP SP1上で動かしてるだけなんですが、
他に何か必要なんでしょうか。

落としたファイルの内書き換えた場所は、echobot.plの

my $handle = '自分のhotmailアドレス';
my $password = 'パスワード';
my $admin = '自分のhotmailアドレス';

のみなんですが…。

何かアドバイスなどよろしくお願いします…。
03133122005/03/31(木) 08:27:17ID:???
ちなみに動かして表示される内容は次のようなものです。
よろしくお願いします…。

MSN 2.0 (01/21/2005) Rev: 84 - Checksum: 60068-NS18164-SB8878

SERVER ERROR : Authentication Error: No response from Passport server
ERROR : Trying to print 'PNG
' on an undefined socket
Caller trace:
0: MSN::error (MSN/Notification.pm, line 102)
1: MSN::Notification::error (MSN/Notification.pm, line 189)
2: MSN::Notification::_send (MSN/Notification.pm, line 519)
3: MSN::Notification::ping (MSN.pm, line 669)
4: MSN::do_one_loop (echobot.pl, line 44)
03143122005/03/31(木) 08:30:28ID:???
あ、あと関係ないかも知れませんがMSNmessengerのバージョンは7.0(BETA)を使用しています。
質問がスレ違いならよろしければ該当スレに誘導して頂ければありがたいです。すいません。
0315nobodyさん2005/03/31(木) 09:40:58ID:???
ImageMagickを使ったサムネイル作成機能つき画像アップローダを作ってるんですが
軽い画像(5kb程度)なら上手くいくものが重い画像(10kb以上)になると
動作しなくなってしまいます。

・アップロード&保存
  軽い画像→OK、重い画像→OK
・アップロード&保存&ImageMagick処理
  軽い画像→OK、重い画像→×
・ImageMagick処理(別スクリプト)
  軽い画像→OK、重い画像→OK

こんな感じで保存とImageMagick処理を同じスクリプトでやろうとすると
上手くいきません。画像処理の実行に関わらず、スクリプト内で
use Image::Magick;しているとダメポです。保存すらできません…。

どういう原因が考えられるでしょうか?
アドバイスお願いしますorz
0316nobodyさん2005/03/31(木) 11:49:16ID:???
>>315
情報少なすぎ。スクリプト吊るさんと。
03173152005/03/31(木) 13:11:59ID:???
後出しすみませんorz
長くなりますがよろしくお願いします。

#マルチパートデータ解析
local($div,$id,$value,$filename,$minetype,$size);
$div = <STDIN>;
$div =~ s/\s+$//;
$line = '';
until($line =~ /^$div--/){
 $id = '';
 $value = '';
 $filename = '';
 $minetype = '';
 $line = <STDIN>;
 until($line =~ /^\s*$/){
  return if eof(STDIN);
  if($line =~ /\sname="([^"]*)"/i){$id = $1;}
  if($line =~ /\sfilename="([^"]*)"/i){$filename = &trim($1);}
  if($line =~ /^Content-Type:\s+(\s+)/i){$minetype = $1;}
  $line = <STDIN>;
 }
 $size = 0;
 $maxbyte = 1024*500;
 $line = <STDIN>;
 until($line =~ /^$div/){
  return if eof(STDIN);
  $size += length($line);
  $value .= $line if ($size < $maxbyte);
  $line = <STDIN>;
 }
03183152005/03/31(木) 13:12:59ID:JNShQA97
 if($size < $maxbyte){
 $param{$id} = $value;
  $paramtype{$id} = $minetype if($minetype ne '');
 }else{
  $param{$id} = '';
  $paramtype{$id} = 'big';
 }
 $paramfile{$id} = $filename if ($filename ne '');
}

#ファイル保存
$oname = &trim($paramfile{"file"});
&jcode'convert(*oname,'euc');
$oname =~ s/\\/\//g;
$oname = substr($oname,rindex($oname,"/")+1);
$type = $paramtype{"file"};
$bindat = $param{"file"};
if($type eq 'big'){&err;}
if($bindat =~ /^\s*$/){ $chk='ok';}
elsif($bindat =~ /^GIF\d\d[a-z]/) { $chk='ok'; }
elsif($bindat =~ /^\xFF\xD8\xFF\xE0\x00/) { $chk='ok'; }
elsif($bindat =~ /^\x89\x50\x4E\x47\x0D\x0A\x1A\x0A/) { $chk='ok'; }
elsif($type =~ /image\/gif/i){ $chk='ok'; }
elsif($type =~ /image\/jpeg/i){ $chk='ok'; }
elsif($type =~ /image\/x-png/i){ $chk='ok'; }
else{ $chk='no'; }
if($chk ne 'ok'){ &err;}
$fullpath = "$imgdir$oname";
if(-f "$fullpath"){&err;}
03193152005/03/31(木) 13:13:24ID:???
if($bindat ne '' && $oname ne ''){
 unless(open(FILE, ">$fullpath")){&err;}
 binmode(FILE);
 print FILE $bindat;
 close(FILE);
 chmod (0666,$fullpath);

 use Image::Magick;
 $osize = Image::Magick->new();
 $osize->Read($fullpath);
 ($w,$h) = $osize ->Get('width','height');
##以下略
}

ageてしまったごめんなさい。
03203152005/03/31(木) 13:17:16ID:???
しかも文字化けてる……
化け部分はエラー用のサブルーチンに跳ばしてます。
0321nobodyさん2005/03/31(木) 13:28:14ID:???
サーバのエラーログは何か言ってないの?
03223152005/03/31(木) 14:02:42ID:???
>321
レスありがとうございます。
サーバ側では特にエラーは出ていないようです。

use Image::Magick;しなければちゃんと動くんですが、
↑があるとファイル保存以下をスッ飛ばしてスクリプトの
最初の行に戻ってしまうような感じです。
アップロードしたのが軽いファイルなら最後まで正常に動きます。
どこが悪いのか自分ではさっぱり…。
0323nobodyさん2005/03/31(木) 15:52:09ID:???
>>315
CGI.pm使った方が楽だと思うのだが...

使おうとしたが何か問題があってどうしても使えないとか、
CGIの解釈を自分でやる練習ならしょうがないけど。
03243152005/03/31(木) 21:35:58ID:???
こだわりがあるわけじゃないんですが
CGI.pmを使った時、パラメータ名の指定に

for($i=0; $i < $datlist; $i++){
 $hoge = $query->param("file_$i");
}

という感じに変数で指定ってできるんでしょうか?
これやると上手くいかなかったもので…。
03253152005/03/31(木) 23:39:26ID:???
ごめんなさい324は勘違いしてました。
CGI.pmだと好感触みたいなのでこれでもう少し頑張ってみます。
ありがとうございました >323
0326nobodyさん2005/03/31(木) 23:56:49ID:???
ttp://www.melma.com/mag/85/m00014785/a00000008.html
これ見てファクトリパターンかっこええなぁと思ったので、ちょっとやってみるかと思ったんですが、
> return "Message::".$classname->new(%{$arg_ref});
ってことは "Message::".$classname なクラスを事前に読み込ませておかないといけないんですよね?
まさか文頭に「読み込まれる可能性のあるクラスを全部書いておく」なんてことはないんでしょうが、
直前で use "Message::".$classname; とかやっても平気なんでしょうか?
0327nobodyさん2005/04/01(金) 00:04:45ID:???
>>326
>まさか文頭に「読み込まれる可能性のあるクラスを全部書いておく」なんてことはないんでしょうが、
ん? そうじゃないの? そのときどきにrequireする物なのかな? useはNGだお
0328nobodyさん皇紀2665/04/01(金) 13:45:49ID:JJhcoQhv
$hoge = "あいうえお-かきくけこ-さしすせそ-たちつてと";
$_ = $hoge;
if((s/-/-/g) > 10){
print "10以上";
}else{
print "10以下";
}
0329328皇紀2665/04/01(金) 13:47:15ID:???
↑$hogeにあるハイフンを数えて判定する綺麗なやり方を教えてくだされ!
0330nobodyさん皇紀2665/04/01(金) 14:14:26ID:???
>>329
教えてやろうと思ったが、2レスに渡って書いてるのと、語尾がムカついtr。
0331nobodyさん皇紀2665/04/01(金) 14:44:13ID:XdlrhN9n
perlで一般的なハンガリー記法ってありますか?
■ このスレッドは過去ログ倉庫に格納されています