08/04/26 13:15:07 flUVuiqJ
basenameでファイル名を取り出したいのですが、ブラウザが動いているOSの種類によって、
区切りが/であったり\であったりとまちまちです。
perlはLinux上で動いているので、デフォルトでは、/で区切られている場合しか、ファイル名を取り出せません。
\で区切られている場合でも、取り出せるようにするにはどのようにしたらよいのでしょうか?
fileparse_set_fstypeでMSWin32を指定してしまうと今度は、Unixからアクセスしてきた場合にうまくいきません。
377:nobodyさん
08/04/26 13:19:19
んなもんアクセスしてきたOSの種類で使いわけりゃいい話だろボケ
こんなもん中学生でも分かるぞカス死ね
378:nobodyさん
08/04/26 16:13:45 flUVuiqJ
もしブラウザがOSに関する情報を送ってこなかったらどうすればよいのでしょうか?
379:nobodyさん
08/04/26 16:23:13
>>378
ファイルの有無を判断して、
どっちのデリミタで切るか、
判断したら?
380:nobodyさん
08/04/26 17:01:10
アクセスしてきたOSは関係ない。
Perlが動いているサーバーのOSが関係する。
そして、basenameは動いているOSによって区切りを/か\か自動的に
判断してくれるので便利に使える。
サーバーがWindowsでもLinuxでもbasenameは正しく動いてファイル名を取り出せる。
取り出せない場合は、何か別の原因。
381:nobodyさん
08/04/26 19:45:43
type=fileで送られてくるファイル名の話じゃないのか?
382:nobodyさん
08/04/26 21:48:20 vQRq4Omz
だいたいみなさんの、perl普通にコード書き込みできるまでに要した
時間と日数おしえてもらえませんか?時間とか1日何時間くらいしてます?
383:nobodyさん
08/04/26 22:09:54
意味が。
384:nobodyさん
08/04/26 22:14:17
>>382
もっと、日本語を勉強した方がいいよ
385:nobodyさん
08/04/26 22:49:57
>>382
皆さんは「週何日、1日当たり何時間」なんていう時間割みたいな方式で
取り組んできたわけじゃないので、そういうのはよくわかんないのです。
そりゃ、そんな方式で堅苦しく取り組んできた人もいるかもしれないけど。
あなたが今までにちんちんを何ストロークしてきたかが不明なのと似てます。
386:nobodyさん
08/04/27 00:52:54 G3KB/HmG
mod_rewriteでURLを書き換えた時に%2Fがあると404エラーになってしまうので
スラッシュをURLエンコードさせたくないのですが、可能でしょうか?どなたか助けてください・・
p://example.net/dir/index.cgi?name=<em>hoge</em>
このように、どうしてもタグが含まれてしまうURLなので困ってます。
見るからに初心者ですが、どうかよろしくお願いします。
387:nobodyさん
08/04/27 01:20:29
>>386
不可能。
388:386
08/04/27 02:55:07 G3KB/HmG
>>387
そうですか・・
諦めて他に方法がないか試行錯誤してみます
ありがとうございました。
389:nobodyさん
08/04/27 23:26:09
>>382
10時間ぐらいかな。
もっとも、Perl以前にawk, sed, C
などの下地があったわけだが。
390:nobodyさん
08/04/27 23:35:33
普通がどの程度か全く分からないけど、とりあえず動く掲示板を作るのに1日1~2時間ほど
コード書いて1週間かかった気がする
そんな自分は C (すっかり書けないけど、ポインタで躓くまでは書いてた)、VB (アプリをいくつか作ってた) の経験ありです。
391:nobodyさん
08/04/27 23:39:03
Perlでバッチ処理を書くのはすぐ出来るけど、
Webアプリ(cgi)は時間がかかると思う。
392:nobodyさん
08/04/27 23:44:48
そんな貴方にCGI.pmですよ
393:nobodyさん
08/04/30 17:01:56 9OxUbc+M
あの、乱数についてなのですが、100~150までの間でランダムな数をスカラー変数に格納するにはどうすればいいでしょうか?
394:nobodyさん
08/04/30 17:13:24
my $rndnum = rand(51) + 100
rand(51)
0 ~ 51 未満を生成 (未満は 51 を含まないので 50 以下の数字が現れる)
+100
下限値である 100 を加えてやる
以上
395:nobodyさん
08/04/30 17:14:49
int
396:nobodyさん
08/04/30 17:19:40
my $rndnum = int(rand(51)) + 100;
397:nobodyさん
08/04/30 17:19:49
忘れてたw
>>395
thx
my $rndnum = int(rand(51) + 100);
398:nobodyさん
08/04/30 18:11:00
>>393の質問ではintなしの>>394が正解とすべきなんじゃないか?
質問者の質問が悪いところまでフォローして手取り足取りするのが役目?
399:>>393
08/04/30 18:26:54 9OxUbc+M
皆さんどうもありがとうございます。
確かに>>398さんの言うとおりです。わざわざフォローして下さった親切なお二方に感謝します。
400:nobodyさん
08/04/30 18:38:47
すいません。
どうも下記例のforeachのループの中で、さらにwhileのループを
回せないのですが、たぶん簡単な理由だとは思うのですが、
お助け下さい。
他にもこのようなforeachのループの中で、foreachのループも回せないと
思います。
foreach $number(@number){
while (<F2>) {
print "$number\n";
if (/$number/)
{
print "マッチしました\n";
print F3;
}
}
}
401:nobodyさん
08/04/30 19:09:01
>>400
<F2>で同じ行数を複数回とりだしたい感じ?
だとしたらヒント:seek
402:nobodyさん
08/04/30 19:10:23
>>400
1回目のforeachが終わったときに<F2>が空になる
403:nobodyさん
08/04/30 19:48:00
whileに入る前に開きなおすのも手だな
404:nobodyさん
08/04/30 20:17:59 GavbPT5W
一回目のループで開いてるファイルのファイル位置が終端にあるため
2周目はファイルを読み込むループが発生しません
解決法は2つ
・While の直前でファイルを開くようにする
・While の直前で seek を使ってファイル位置を先頭に戻す
です。
負荷は後者の方が幾分か軽いです
405:nobodyさん
08/04/30 20:28:06
my @lines = <F2>;
場合によってはこれもありかなと思った。無駄にメモリ食うけど。
406:nobodyさん
08/04/30 20:47:41
whileの中でforeachじゃ駄目なん?
407:400
08/04/30 23:43:57
すいません。seekというのは初めて知りました。
1回目のforeachが終わったときに<F2>が空になる ってマジですか。
例のループにseekを追加して、動くようにしていただけませんか?
お願いします。
408:nobodyさん
08/05/01 01:39:53
>>400
初めてのPerlと続・初めてのPerl買えばいいよ。
409:nobodyさん
08/05/01 12:48:54
コストの高い I/O をメインにループさせたほうがいいっすね
open(F2, "hoge.txt");
while (<F2>) {
foreach $number(@number){
~
}
}
close(F2);
410:nobodyさん
08/05/01 13:18:21
>>407
自分でやれ。
できないなら金払って業者つかえ。
代行するところじゃなく、自分で作るためのヒントを与えるところだ。
ここまでヒントがそろったらあとは調べながらできる。
411:nobodyさん
08/05/01 13:51:56
あとね、初心者なんだから記述を略すな
ちゃんと意味がわかってから略すように汁
412:400
08/05/01 23:38:01
>409 Thx 明日試してみます。seek(F2, 0, 0)では動かなかった。
>410 GW中くらい、自宅警備を止めてみたら?
>411 省略ハァ? 汁?
413:409,411
08/05/01 23:46:36
そういう口調ならてめぇで解決しろよ能無しチンカス糞野郎
414:nobodyさん
08/05/02 00:07:00
> 省略ハァ? 汁?
ワロタ
415:nobodyさん
08/05/02 05:46:04
まあ、なんだ
「ものを学ぶ姿勢」ってやつを身に着けないと成長できないよね
416:nobodyさん
08/05/02 08:12:32
きっとこの人はこれからさきの人生も困ったら自分の力で解決しようとせず人を頼りにして生きていくんだろうな。
これ10代だったら笑って流せるけど、20代以上で本気で言ってたら深刻ww
417:nobodyさん
08/05/02 10:22:44
定期的に沸くから慣れろwww
418:nobodyさん
08/05/02 10:32:20
自分の書いてるのが略記だって事すらも気がついてないんだろうな
あと、これはおそらくは宿題だなw
419:nobodyさん
08/05/02 11:18:57
延々と質問者を叩く・・・キモッ
とっくに質問者は消えてることに気づけよ禿げ
420:nobodyさん
08/05/02 12:28:02
>>419
僕の予想が確かなら、質問者なら君のパソコンのモニタの前に居るよ。
421:nobodyさん
08/05/02 12:37:17
>>420
はぁ?俺か?
ちゃうっちゅーねん
あほか
422:nobodyさん
08/05/02 13:12:28
ノリが一緒でわろたwww
423:nobodyさん
08/05/02 13:34:20
お前の粘着っぷりのほうがおもろい
医者いったほうがええんちゃうかw
リアルでアレかw
424:nobodyさん
08/05/02 13:43:58
日本語が変でござるよ
425:nobodyさん
08/05/02 14:15:25
ネット上での似非関西弁って餓鬼が凄む時に巻き舌になるのに似てる
426:nobodyさん
08/05/02 14:47:41
それは言わないのが優しさだったのに・・・
427:nobodyさん
08/05/02 15:08:52
質問者以外が必死になる理由が見つからない
428:nobodyさん
08/05/02 18:44:35
ぼくが一番、perlをうまく操れるんだ!
429:nobodyさん
08/05/02 23:07:56
>>427
思い込み激しいとか言われへん?
回りに迷惑かけても気づかないタイプだな
回答もしないのに罵倒するのはお前だけやろ
頭変すぎてわからんかw
430:nobodyさん
08/05/02 23:28:43
>>429
そんならお前が回答してやれよ。 出来るもんなら。www
431:nobodyさん
08/05/02 23:45:27
>>429
なんでそんなに必死なん?
432:nobodyさん
08/05/02 23:59:11
GWで暇なんだろ
433:nobodyさん
08/05/03 02:50:47
GW、通勤とか会社の中とか人が少なくていいよね。
434:nobodyさん
08/05/03 03:07:39
いいですよね。客からの電話も鳴りませんし。
435:nobodyさん
08/05/03 10:04:09
泣いてませんか?
436:nobodyさん
08/05/03 18:44:15
内線もならないよね。
437:nobodyさん
08/05/03 19:02:10
でもトイレに花子さん居るよね。
438:フー子
08/05/04 19:36:48 798fbSDd
Perl の CGI::Base とか CGI::Request モジュールって、
何のためにあるの?どうやって使うの?
439:nobodyさん
08/05/04 19:50:31
>>398
初心者質問スレで何言ってるんだ。
440: ◆TWARamEjuA
08/05/04 20:01:51 BE:3267465-2BP(7082)
>>438
君かわいいね。
・・・ぶつ森のスレかとオモタorz...
URLリンク(search.cpan.org)
URLリンク(search.cpan.org)
を眺めてみればよろしいかと。
例文を眺めればだいたい何がしたいのかが見えてくるかと。
英文は無理に読まなくてもよろしいかと。
441:nobodyさん
08/05/04 20:22:15
pmという拡張子、ガクブル
442:nobodyさん
08/05/05 14:08:42 GD7pTJpy
CGI掲示板を自作していますが、書き込み送信メールのSendmailによる送信処理でつまづきました。
以下のように記述すると、管理人である自分には登録メールが送られますが、
管理人以外に、書き込みした人にも登録確認メールが送られるようにしたいんです。
#Sendmailによる送信処理
if (open(MAIL,"| $sendmail -t")){
print MAIL "X-Mailer:legend2\n";
print MAIL "To: $administrator\n";
print MAIL "Errors-To: $administrator\n";
print MAIL "From: $administrator\n";
print MAIL "Subject: $subject\n";
print MAIL "MIME-Version: 1.0\n";
print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "$mail_comment\n";
print MAIL "\n";
close(MAIL);
}
}
以下のどれかを使うのでしょうか?
print SENDMAIL "From: $sender <$from>\n";
print SENDMAIL "To: $to\n";
print SENDMAIL "Cc: $cc\n";
print SENDMAIL "Bcc: $bcc\n";
どうすれば良いか御教授下さい。宜しくお願いします。
443:nobodyさん
08/05/05 14:20:17
>>442
# CGIは板違いだが、この処理自体はCGIと関係がないので。
if文のブロックを、Toヘッダだけ「書き込みした人」のアドレスにしてもう一度処理するか、
Toを「書き込みした人」のアドレス、CcまたはBccを「管理人」のアドレスにするか。
Errors-Toヘッダはobsoluteだった気がします。
envelopeアドレスを指定するべし。sendmailに-fオプションに続けてアドレスを指定する。
URLリンク(sonic64.com)
444:nobodyさん
08/05/05 16:36:56
つーか、今時、open(MAIL,"| $sendmail -t")やErrors-To:とか前世紀に
書かれた古文書を元にCGI作るな。めーわくだ。
445:nobodyさん
08/05/05 18:19:44
批判だけならゾウリムシにもできる
例文または参考 URL ぐらい提示すればいいじゃない
446:nobodyさん
08/05/05 19:20:18
ただでは断る。
447:nobodyさん
08/05/05 20:15:30
>>446
しね
448:nobodyさん
08/05/05 21:17:57
役立たずなテキストに騙される処を指摘してやったのに随分な言い草だな。
449:BEET
08/05/05 21:36:20
URLリンク(z-z.jp) ここのスクリプト抜きたいんですけど、どうしたらいいのですか?
450:nobodyさん
08/05/05 21:39:44
>>449
むり
451:nobodyさん
08/05/05 21:57:12
>>449
ハッキングすればできるかもしれない。
452:nobodyさん
08/05/05 22:16:06
スクリプト抜くってどういう意味なんですか?
453:nobodyさん
08/05/05 22:44:54
ハァハァするんじゃないかな。
454:nobodyさん
08/05/05 23:21:45 V/xhfGfA
ftpで接続しないとスクリプトは抜けないでしょう
455:BEET
08/05/06 00:42:09
回答ありがとう。 ハッキングって.. 簡単なのかな? ソフトはできるだけ使いたくないな
456:BEET
08/05/06 00:45:09
追記なんですけど
このレンタル掲示板の管理パスをクラックされて、改竄されたんだけど、どうやってクラックしてるのかな?
457:nobodyさん
08/05/06 00:49:33 fJq/GBDg
(`・ω・´)??
458:nobodyさん
08/05/06 00:50:15
>>455-456
>>1を100回声を出して読め。
読み終わったら610と三ポールのミックスカクテル飲め。
459:nobodyさん
08/05/06 00:51:09 fJq/GBDg
(`・ω・´)ソフト使ってるだろww
460:nobodyさん
08/05/06 09:09:26
Windowsローカルに入れたActivePerlで
cpan > install XML::ATOM::Feed
したのに、それを500エラーになってしまいます
(useしてるところをコメントアウトすると通る)
moduschで見たら「存在しないか、ロード出来ない」っぽい
なぜでしょうか…?
461:nobodyさん
08/05/06 16:59:23
>>442
BCCで目的は達成できると思うけど、
自分のメールアドレスを、スパムを送りたい先などにされると
簡単にスパムの踏み台になるから気をつけてね。
462:nobodyさん
08/05/06 22:50:17 wGWcI8Lv
AUTOLOADってのを初めて使ってみたんです。
未定義の関数を読んだら無事AUTOLOADが呼ばれたんですが、
変数$AUTOLOADを参照するとGlobal symbol~っていうエラーが出てしまいます。
AUTOLOADを使う場合はno strictしていいものでしょうか。
463:nobodyさん
08/05/07 00:05:35
use strict;
use warnings;
sub AUTOLOAD {
our $AUTOLOAD;
print $AUTOLOAD;
}
foo();
464:nobodyさん
08/05/10 23:18:32
URL転送なんだけど今こうしてます↓
#!/usr/bin/perl
print "Location: URLリンク(*****\n\n)";
これに転送するまでHTMLの<meta content="x">みたいに
一定時間ウェイトかける事って出来るのでしょうか?
465:nobodyさん
08/05/10 23:19:01
いいえ
466: ◆TWARamEjuA
08/05/11 01:16:36
転送するまでひと寝入りする。
467:nobodyさん
08/05/11 02:11:14
>>464
いい事いうじゃねえか。
出来るんだな?
今すぐ頼むぞ。
468:nobodyさん
08/05/11 13:18:10 yMOlxpUv
print qq{あいうえお @{[1+1]} かきくけこ };
無名配列のリファレンスとデリファレンスを使ってクォート内に式を埋め込めます。
これ気に入っててよく使うんですが、これのスカラーリファレンス版ってできませんか?
\$()
無名スカラーって存在しないんですかね。
いやそもそも@{[]}に式を埋め込めるのはそこをクォート内ではないと認識するからなわけで。
いや、う~ん。確かこれなんかいい方法があったような期がするんですが。
469:nobodyさん
08/05/11 23:02:44 Vy6R2X5C
Perlスクリプトの処理が全て完了する前に
クライアントとの接続を明示的にクローズする方法は
ありませんでしょうか?
以下のようなことが実施したいです。
どなたかよろしくお願いします。
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>なんちゃら</body></html>";
## ここで明示的にクライアントとのConnectionをクローズしたい。
## ここからクライアント側に影響がない時間がかかる別の処理を実施したい。
&HokaNoShori();
exit;
470:nobodyさん
08/05/12 01:08:40 CYOIx0A2
perlで重い処理をさせるのが困ります。
例えばパソコンの30%の能力だけ使わせるとかってできませんか?
471:nobodyさん
08/05/12 01:16:51
>>470
それは知らないけど、nice付けて起動とかしてみては?
472:nobodyさん
08/05/12 03:09:36
>>468
qq{ ${\do {1+3}} }
473:nobodyさん
08/05/12 04:50:44
>>469
close(STDOUT);
474:nobodyさん
08/05/12 10:21:48
>>469
fork
475:nobodyさん
08/05/12 16:03:50
WindowsXPでActivePerlを使って
クリップボードにあるテキストに処理を加えて
クリップボードに戻すプログラムを作ろうとしています。
Win32::Clipboardを使用しているのですが、Unicodeだと化けてしまいます。
Unicodeでも化けないで処理できる方法はあるでしょうか?
476:nobodyさん
08/05/12 16:08:19 CYOIx0A2
>>472
思い出した!
print qq{ ${ \(1+1)} };
でしたね。
なるほどなるほど。${}これでデリファレンスができるというわけだ。
477:nobodyさん
08/05/12 17:20:30
Win32::Clipboard が受け取るのは Shift_JIS 固定っぽいです
Encode でShift_JIS にして渡してみたらどうりますか?
478:nobodyさん
08/05/12 18:00:21
>>477
回答ありがとうございます。
Shift_JISにない文字も処理したかったので
Win32::Clipboardでは無理と言うことですね。
Win32::Clipboard以外でクリップボードを利用できるものはありますか?
479:nobodyさん
08/05/12 20:22:51
文字化けしないようにする方法教えてください
use LWP::Simple;
my $page = get('URLリンク(hogehogehoge.jp)');
getprint('URLリンク(hogehogehoge.jp)');
print $page
480:nobodyさん
08/05/12 21:36:53
>>479
ヒント:Jcode
481:nobodyさん
08/05/13 01:04:45
perl 文字化け でググれカス
482:479
08/05/13 03:44:42
エスジス保存しておいたソースファイルをEUCに変更保存してみたけど
何も変わんないですよ
483:nobodyさん
08/05/13 06:45:22
>>482
「ソースファイル」ってのが上の us-ascii で足りそうなコードのことだったら
SJIS → EUC しても何も変わんないですよ。
環境その他も書かれてないし、変換に興味なさそうなので
perl hoge.pl > test.html
して「まともなエディタで見れば文字化けしない」でいいのかも。
484:nobodyさん
08/05/13 13:57:38
>>464
Location:を表示する前にwaitをいれればおk
485:nobodyさん
08/05/17 19:31:00
$obj = new Class;
$obj = Class->new();
この二つの違いは何ですか?
486:nobodyさん
08/05/17 20:03:56
おんなじ。どっちのClassクラスのコンストラクタを呼んでるだけ。
Classってサブルーチンが定義されてるときに問題がおきることがあるので、
$obj = Class->new;
の形式のほうが推奨されるけど。
487:nobodyさん
08/05/17 23:09:13
>486
ありがとんです
488:nobodyさん
08/05/18 11:25:25
俺はコンストラクタを呼び出すときだけはnew Classってしてあとはぜんぶ$obj->sub()ってするかな。
489:nobodyさん
08/05/19 06:36:14
なんだか、急にCPANでエラーで全く動かなくなったので、いろいろ調べてみたら、
ERRNO.pmが、MSWin32-x86-multi-thread-5.00(Windows Updateでいつの間にか変わってた)を弾いてた。
とりあえず、ERRNO.pmを書き換える(!)ことで対処したんだけど、
他に同じトラブルあってる人いません?
490:がんちゃん
08/05/19 10:02:27
perlでImage::MagickのAnnotateを使って画像と文字を合成できたのですが
出来上がった画像を右クリックして保存しましたが
そのファイルが開けません。
何が原因でしょうか。宜しくお願いします。
491:nobodyさん
08/05/19 11:27:27
>>490
開けないとは具体的にどういうこと?
単に、変なファイル名(拡張子)で保存してしまって、ダブルクリックしても関連づけの問題で開けないってことではなくて?
492:がんちゃん
08/05/19 12:15:34
うっせーよ!それぐらい分かるっての!腐った回答してんじゃねぇよwww
493:がんちゃん
08/05/19 12:29:05
* *
* + うそです
n ∧_∧ n
+ (ヨ(* ´∀`)E)
Y Y *
494:がんちゃん
08/05/19 12:32:08
なんだここの人たちはこれぐらいの質問も答えられないの?
回答者が初心者のスレだったのか・・・
495:がんちゃん
08/05/19 12:35:01
* *
* + うそです
n ∧_∧ n
+ (ヨ(* ´∀`)E)
Y Y *
496:nobodyさん
08/05/19 14:06:12
print "Content-type: image/jpeg\n\n";
binmode STDOUT;
$image->Write('jpeg:-');
ソース晒せや。
497:nobodyさん
08/05/19 14:11:40
なにこの流れ・・・
498:nobodyさん
08/05/19 15:48:41
質問の仕方も知らないというか、質問の文章すら正しく書けない馬鹿が多すぎ
Perl云々の前に日本語学校行け
499:nobodyさん
08/05/19 15:59:52
\E
500:nobodyさん
08/05/19 16:39:50
はい、次
501:nobodyさん
08/05/19 16:41:56
>>498
お前の文章が一番変だわ
502:nobodyさん
08/05/19 18:36:38 82E4EJS9
すみません。ド素人です。
質問です。
Can't locate GD/Image.pm in @INC (@INC contains: C:/perl/site/lib C:/perl/lib .)
というソフトウェアエラーが出て、CGIを実行できません。
どうかどうか、教えてください。
503:nobodyさん
08/05/19 18:38:59
GD を入れてください
はい次
504:nobodyさん
08/05/19 18:39:34 82E4EJS9
GDは入れてるんですけど、image.pmってのがなにか、わかんないんです。。。
505:nobodyさん
08/05/19 18:44:49
GD-Image-Thumbnail でも居れておきゃえぇんとちゃうのん?
506:nobodyさん
08/05/19 18:45:58 82E4EJS9
505さん ありがとうございますぅやってみます。
507:nobodyさん
08/05/19 18:47:44
URLリンク(search.cpan.org)
508:nobodyさん
08/05/19 18:54:23 82E4EJS9
507さん。。ありがとうです。
けど、このページの、なにをどうすればいいのか。
わかりません
どうしようもない素人なので。。
509:nobodyさん
08/05/19 19:12:16
*.pmってのはPerlモジュール
エラーの内容は「このモジュールがみつからないよパパ」
→インスコor場所確認
とりあえずモジュールが入ってるか確認する
→ぐぐる
入っていない場合、モジュールをインスコする
→ぐぐる
入っている場合、パスを確認する
→ぐぐる
510:nobodyさん
08/05/19 19:26:15
GDのバージョンを2.39に上げれば解決。
511:nobodyさん
08/05/19 19:58:48
「初心者」「素人」は分からないからフルサポートしてもらえる理由になりません。
512:nobodyさん
08/05/19 20:03:39 82E4EJS9
GD2.39の中のGD.pmとGDフォルダを /perl/libの中にドラック&ドロップしてるんです。
これは、どこかのサイトに書いてあったので。しました。
そしたら、エラーがでて。GD/Image.pmがどうのこうのとなってまして。
505さん507さん509さん510さんの言葉も、正直、理解しきれてない状況です。
まず、インスコというのが、コマンドプロンプトでするらしいとどこかに書いてて、
してみたんですけど。まず、「ppm」とすると、perlpackagemanagerが起動して、
その中に、GDがなくて。どやってインストールしていいのかも、わかんない感じです。
すみません長々と。どうかお助け願います。。
513:nobodyさん
08/05/19 20:03:43
ローカルで試そうとしてるやつが、
どうしようもない素人を名乗るなよ。
向上心ねぇのか
514:nobodyさん
08/05/19 20:16:06
>>512
URLリンク(www.bribes.org)
ここへいってら。
それができたら、こっちも回っておくように。
URLリンク(theoryx5.uwinnipeg.ca)
515:nobodyさん
08/05/19 20:18:47 82E4EJS9
514さんありがとうございます。
読んでます。
516:nobodyさん
08/05/19 21:08:55 82E4EJS9
やっぱりエラーになります(涙
517:nobodyさん
08/05/19 21:35:03
リポジトリを増やしたのだからインストールできるはずだが。
掲示板なんだから、レスに主語と述語をはっきり書いてくれ。
とりあえず、頭にエラーが出たのか?
518:nobodyさん
08/05/19 22:17:16
良く読んでないけど、
スタート→すべてのプログラム→ActivePerl→Perl Package Managerで
必要なものをクリック、クリック!した方が楽で簡単だよ。
519:nobodyさん
08/05/19 23:01:51 82E4EJS9
perl package managerの中に GDが見当たらないんです。
コマンドプロンプトで CPANから install GDってしても
できないんです。
GD/image.pmが@INCに無いっていうエラーが出るんです。517さん。
520:nobodyさん
08/05/19 23:13:22
>>519
>>514サイトをよく読んでppmにリポジトリを追加すると、GD 2.39がインストールできるようになる。
ちゃんとリポジトリを追加したか?
それでも出ないというのなら、ppmに問題があることになる。
521:nobodyさん
08/05/19 23:23:58
URLリンク(mikiho.jp)
serach のとろを
s GD
としてくださいな
これでも出来なければ諦めてください
サポートしきれないです
522:nobodyさん
08/05/20 01:25:53
URLリンク(pub.ne.jp)
Perl 5.8ならなんか面倒そうなんだけどこれかな?
523:nobodyさん
08/05/20 03:52:12 U/T3y6km
ここ見て、Win用のGD-2.39来てるのかと思い、threory58に行くも2.35しかないじゃないか!?ぷんぷん。
ふと、PPM-Repositoriesを0.14に上げて見るとbribesなるレポがあるので、これを見に行くと、
おおー、結構新しいの来てるじゃないか~と、調子にのってperl areaのmoduleもUpしまくる。
しかし、Compress-ZlibをUpすると、Bandleされてたversionを上書きしてしまい、
それ以降ppmがtar.gzファイルを展開できなくなってしまった。(今まで見たことないエラーでPPMが落ちる)
とゆうことで、今やっと再インストールと、(自分のよく使う)各種モジュールのインストール、最新版へのUpデートが終わった。
なんとか、Compress-Zlibも2.010に上げる事ができた。
ふう、疲れたぜ・・・・。
524:nobodyさん
08/05/20 04:15:25
そうなんだお疲れちゃん
525:nobodyさん
08/05/20 14:16:09 XrCi5l42
519です。
いろいろサポートいただいて、できました。
ほんとに感謝してます。ありがとうです。
526:nobodyさん
08/05/21 00:33:37
phpのexplodeみたいに、
正規表現を使わずに高速に動作するsplitの代わりはないでしょうか?
527:nobodyさん
08/05/21 01:39:24
substrでループさせる自前の関数でも作れば?
528:nobodyさん
08/05/21 01:41:57
それって速いのかな。。
indexとsubstrを併用してちょっと試してみるか。
529:nobodyさん
08/05/21 11:18:20 crauFAgn
モジュールが一切入っていないレンタルサーバで、xmlを読み込もうとしています。
ググってみると、どこもXMLとLWPというモジュールを読み込む事が前提になっているようなのですが、
何も無い状態でXML
530:529
08/05/21 11:19:42
すみません途中で送信してしまいました…orz
モジュールが何も無い状態でXMLを読み込むために
参考になるようなサイトがありましたら、ご教示下さい。
宜しくお願いします。
531:nobodyさん
08/05/21 12:00:10
ソケット使ってゴリゴリ書くしか無いんじゃないかな
532:nobodyさん
08/05/21 12:06:34
モジュールが一切入っていないレンタルサーバでソケットが使えるようにインストールされてる
とはとても思えないが・・
533:nobodyさん
08/05/21 12:14:45
xmlそのものについても調べてる状態なんですが、
どうも事実上無理っぽいということですかね…orz
お騒がせしました、ありがとうございました。
534:nobodyさん
08/05/21 13:46:16
php が動くなら php 普通にネットワーク経由でファイル開けるので php も考慮してみれば?
535:nobodyさん
08/05/21 23:33:50
>>529,530
XMLを読み込むだけなら、XML::TreePPでXMLが読める。
別サイト上にあるXMLを読むならLWP等が必要。
536:nobodyさん
08/05/22 08:42:14
質問です。Snアップローダー(URLリンク(sugachan.dip.jp))の
ファイル個別HTMLを作成する部分で
$buff = "<html><head><title>$filename</title></head><body>";
$buff .= qq|Download <a href="./$filename">$filename</a>|;
$buff .= '</body></html>';
(ソースの760行目付近です)
特定の拡張子のみ別のHTMLコードを書き出したいのですが
if文で$filename等試してみましたが上手く行きませんでした
どなたか分かる方宜しくお願いします
537:nobodyさん
08/05/22 10:13:46
改造スレいけ
538:nobodyさん
08/05/22 12:40:41
$buff .= qq|Download <a href="./$filename">$filename</a>|;
こういう書き方もあるんだ。勉強になったw
539:nobodyさん
08/05/22 13:18:50
毎行クォート変えるくらいならヒアドキュメント使えよ
540:nobodyさん
08/05/22 13:25:55
ヒアドキュメントもコーディングの桁揃えと、HTMLの桁揃えでタブを使うと、すっきりする方法
がなかなか見つからない。
541:nobodyさん
08/05/22 13:40:38
>if文で$filename等試してみましたが上手く行きませんでした
どう試して、どういう結果になったのか書かないと。
基本だと思うが。
542:nobodyさん
08/05/22 17:17:18
>>540
普通に cookbook にある解ではダメなのか?
URLリンク(www.unix.com.ua)
543:nobodyさん
08/05/24 13:22:00 CztaXqIN
セッション変数の受け渡しについての質問です。
print <<EOT
<form action="URLリンク(localhost)" method="post">
<p>
<label for="nm">お名前:</label>
<input type="text" name="namae" id="nm"><br>
<label for="ma">メール:</label>
<input type="text" name="email" id="ma">
</p>
<p>
<input type="submit" value="送信">
<input type="reset" value="リセット">
</p>
</form>
EOT
;
これらのフォームデータをセッション変数としてsession.cgiに受け渡したい
のですが、どのようにすればよいでしょうか?
CGI::sessionモジュールを利用して、session.cgi側で
$hoge=$cgi->$session->param('namae');
などとすればセッション変数として受け取れる事は分かったのですが、
フォームからの受け渡し方が分かりません…。
よろしくお願いします。
544:nobodyさん
08/05/24 13:38:27
hiddenで投げれ
545:nobodyさん
08/05/24 13:41:36
>>543
どれがセッション変数なの?
546:543
08/05/24 13:47:45 CztaXqIN
>>544
hiddenフィールドを利用すればセッション変数として受け渡されるのでしょうか?
>>545
「お名前」や「メール」フォームに入力された文字列をセッション変数として
session.cgiで受け取りたいと考えています。
547:nobodyさん
08/05/24 13:47:48
CGI.pmでデータを受け取るところから勉強を始めるべき。
セッションはその後。
548:nobodyさん
08/05/24 13:49:52
・hidden
・GET
・cookie
わざわざCGI::session使うくらいなんだから、普通はcookie使うんじゃね?
549:543
08/05/24 13:53:40 CztaXqIN
>>547
すいません。>>543の書き込み微妙に間違っています。
$hoge=$cgi->$session->param('namae'); のところ
通常データの受け取りは
$hoge=$cgi->param('namae');
セッションでの受け取りは
$hoge=$session->param('namae');
の間違いです。
550:nobodyさん
08/05/24 14:04:47
>>549
受け渡しの情報が知りたいって言ってるのに、
受け取りのソース書いてるから、それを指摘されてるんだよ。
>基本的にはセッション系モジュールの役割は、特定のキー=セッションIDに紐付けて、
>データを保存したり、読み込んだりといったことです。
>セッションIDの受渡しはCGI側でする必要があります。
ヒント:URLリンク(digit.que.ne.jp)
551:543
08/05/24 14:05:03 CztaXqIN
cookieにセッションIDやもっておきたいデータ(今回の場合、お名前やメール)を記述しておき、
サーバ側から要求があった時点でクライアントはそのcookieのデータを受け渡す
といったイメージで良いのでしょうか。
うぅ、難しい。。。
552:543
08/05/24 14:13:48 CztaXqIN
>>550
>受け渡しの情報が知りたいって言ってるのに、
>受け取りのソース書いてるから、それを指摘されてるんだよ。
データを受け渡す側のソースが>>543で、受け取るソースがsession.cgiだと
認識してるのですが…。間違っているでしょうか。
もしかしたら私が勘違い?をしているのかも?
553:nobodyさん
08/05/24 14:14:00
>>551
正直、目的に対して技術が足りなすぎる。イヤミじゃなくてね。
トラブル起こす前に、オライリーのCGIプログラミング読破オススメ。
554:nobodyさん
08/05/24 14:18:21
>>552
>受け取るソースがsession.cgiだと認識してるのですが…。
少なくてもこのソース中でセッションIDはどこにも発行してないでしょ?
後は調べなさい。
555:554
08/05/24 14:19:15
ごめんミスった。
× >受け取るソースがsession.cgiだと認識してるのですが…
○ >データを受け渡す側のソースが>>543で
556:543
08/05/24 14:19:38 CztaXqIN
すいません。もう少し勉強しなおしてきます。
みなさん、有難うございましたー・・・
557:543
08/05/24 14:23:19 CztaXqIN
>>554
あ、ソースの一部分しか乗せてなかったためです!
use CGI::Session qw/-ip_match/;
my $session=CGI::Session->new(undef,undef,{Directory=>'./session'});
$session->expire('+1m'); #有効期限は1分間
$session->param('name','john'); #セッション経由で引き渡す項目と値
my $cgi=CGI->new;
print $cgi->header(-charset=>'UTF-8',
-cookie=>$cgi->cookie(-name=>'CGISESSID',
-value=>$session->id,
-expires => '+3M')),
#cookieにセッションidを保管
$cgi->start_html(-lang=>'ja',
-encoding=>'UTF-8',
-title=>'CGI.pm使用/cookie'),
$cgi->p('session id: '.$session->id.'<br/>',
'name: '.$session->param('name').'<br/>',
558:543
08/05/24 14:24:17 CztaXqIN
続き
print <<EOT
<form action="URLリンク(localhost)" method="post">
<p>
<label for="nm">お名前:</label>
<input type="text" name="namae" id="nm"><br>
<label for="ma">メール:</label>
<input type="text" name="email" id="ma">
</p>
<p>
<input type="submit" value="送信">
<input type="reset" value="リセット">
</p>
</form>
EOT
;
$cgi->end_html;
#end
すいません…!
559:nobodyさん
08/05/24 14:27:18
めんどくさいし、合ってる保証ないけど、適当にフォローしてみる
追記 use CGI;
追記 my $cgi = new CGI;
× my $session=CGI::Session->new(undef,undef,{Directory=>'./session'});
○ my $session=CGI::Session->new(undef, $cgi, {Directory=>'./session'});
560:nobodyさん
08/05/25 02:16:54
htmlのフォームデータをセッション変数に格納して利用するには
htmlのフォームデータをpost→受け取ったデータをセッション変数を格納するCGI
→それらのセッション変数にアクセス(利用する)CGI
の流れがいるのでは?
自信ないけど
561:nobodyさん
08/05/25 19:58:56 sAYmYKjS
perlのセッション管理はphpに比べるとかなりめんどい
もちろん細かく制御するには向いてるんだが始めとっつきにくいかもなー
562:nobodyさん
08/05/26 13:29:09
>>561
>>543の質問を分かりやすくPHPで説明すると、
$_REQUESTの内容を$_SESSIONで受け取るにはどうしたらいいんですか?
ということ。
563:nobodyさん
08/05/26 19:00:45 BXwqNwjP
すみません。質問です。
Global symbol "%in" requires explicit package name at C:/ApacheGroup/~~.cgi line 375, <DATA> line 855.
というソフトウェアエラーが出続けてるんですが。
どうすればいいでしょう。
どなたか教えてください~。
564:nobodyさん
08/05/26 19:09:34 fmVA2Qe8
先生方! 質問よろしいでしょうか!
open(OUT,"+< log.txt");
eval{flock(OUT, 2);};
eval{truncate(OUT, 0);};
seek(OUT, 0, 0);
print OUT @log;
eval{flock(OUT, 8);};
close(OUT);
今はこのように通常のテキストでログの上書き保存をしているのですが、
私はgzipで圧縮して上書き保存をしたいのです!
しかしどれだけGoogle先生に訊いてもgzipでの保存方法を教えてもらえません! あの先生はケチです!
もう先生方だけが頼りなんです! 一体どうすればgzipでの保存が可能になるんでしょうか!
565:nobodyさん
08/05/26 19:18:18
>>563
URLリンク(xn--lckja1b6r.jp)
>>564
URLリンク(xn--lckja1b6r.jp)
566:nobodyさん
08/05/26 19:32:47
Archive perl でググればでてくるじゃないの
567:nobodyさん
08/05/26 23:41:19
>>563
英語が読めないなら駱駝本を買うべきだ。
568:nobodyさん
08/05/27 11:06:43
ラクダを漢字で書かれると困ります (><;)
569:nobodyさん
08/05/27 19:27:42
{
$global_foo = $foo;
$global_bar = $bar;
my $foo;
my $bar;
$foo = $_[0];
$bar = $_[1];
$foo = $global_foo if $foo eq undef;
$bar = $global_bar if $bar eq undef;
}
をコンパクトにまとめたいが、バグが混入しそうでいやん。
570:nobodyさん
08/05/27 19:44:24
{
my $global_foo = $foo;
my $global_bar = $bar;
$foo = shift || $global_foo;
$bar = shift || $global_bar;
}
571:nobodyさん
08/05/27 19:55:45
>>569-570
$foo eq undef もたいがいだが
shift || $global_foo だと $_[0] が '0' の時に挙動変わるな。
572:nobodyさん
08/05/27 20:06:24
{
my $global_foo = $foo;
my $global_bar = $bar;
$foo = defined( $_[0] ) ? $_[0] : $global_foo;
$bar = defined( $_[1] ) ? $_[1] : $global_bar;
}
こうか?
573:nobodyさん
08/05/27 20:06:58
あ、三項演算子逆だ。すまん。
574:nobodyさん
08/05/27 20:33:00
defined関数の存在が頭から抜けてたorz
$foo = $global_foo if $foo eq undef;
$bar = $global_foo if $bar eq undef;
ではなく
$foo = $global_foo unless defined $foo;
$bar = $global_foo unless defined $bar;
でお願いします。あと>>570-573サンクス、参考になります。
575:nobodyさん
08/05/27 20:38:51
つーか、>>569だとまともに動かんよ。
初期化するためにmy使っちゃってるように見えるけど、
この場合、ブロックスコープになるから、
ブロック内の$foo, $barと、グローバル変数$foo, $barは別物になる。
576:nobodyさん
08/05/27 20:54:18
myの仕様間違えて覚えてたか…
$global_foo = $foo;
$global_bar = $bar;
{
my $foo;
my $bar;
$foo = $_[0];
$bar = $_[1];
$foo = $global_foo unless defined $foo;
$bar = $global_foo unless defined $bar;
}
欲しい動作はこうかな…
577:nobodyさん
08/05/27 20:56:48
いやいやいやいやw
「perl スコープ 変数」でググっみ。
578:nobodyさん
08/05/27 21:53:15
全然わかってないわかってないwww
579:nobodyさん
08/05/27 22:34:53
my $foo = 1;
sub func {
my $temp = $_[0];
return defined( $_[1] ) ? $_[1] : $temp;
}
ex :
$foo = func( $foo, 10 ); # $foo = 10
$foo = func( $foo ); $foo = 1
580:nobodyさん
08/05/28 00:31:36
早くdefined-or演算子実装されないかな…
581:nobodyさん
08/05/28 01:24:48
今日が今月の何週目か求めるにはどうしたらよいでしょうか
582:576
08/05/28 01:29:54
$global_foo = $foo = 1;
$global_bar = $bar = 2;
@_ = (3,4); #@_に値あり
{
my $foo;
my $bar;
$foo = $_[0];
$bar = $_[1];
$foo = $global_foo unless defined $foo;
$bar = $global_bar unless defined $bar;
print "point 1: foo=$foo bar=$bar\n";
}
print "point 2: foo=$foo bar=$bar\n";
出力結果
point 1: foo=3 bar=4
point 2: foo=1 bar=2
583:576
08/05/28 01:32:06
$global_foo = $foo = 1;
$global_bar = $bar = 2;
@_ = (3,4); #@_に値あり
{
my $foo;
my $bar;
$foo = $_[0];
$bar = $_[1];
$foo = $global_foo unless defined $foo;
$bar = $global_bar unless defined $bar;
print "point 1: foo=$foo bar=$bar\n";
}
print "point 2: foo=$foo bar=$bar\n";
出力結果
point 1: foo=1 bar=2
point 2: foo=1 bar=2
━━━━━━━━━━━━
うん、欲しかった動作そのままだけど。
>>577-578が理解できず悩み中
584:nobodyさん
08/05/28 01:34:02
ぎゃー、>>583張り間違えた
【誤】@_ = (3,4); #@_に値あり
【正】@_ = (); #@_に値無し
orz 120秒規制が若干きつい…
585:nobodyさん
08/05/28 01:35:51
Date::Calc
586:nobodyさん
08/05/28 01:46:51
>>576
目的が分からん。そもそも何がしたいの?
説明する気あるのか?
my $foo = 1;
my $bar = 2;
print $foo = func( $foo );
print $bar = func( $bar );
print $foo = func( $foo, 3 );
print $bar = func( $bar, 4 );
exit;
sub func {
return defined( $_[1] ) ? $_[1] : $_[0];
}
587:nobodyさん
08/05/28 01:47:41
>>585
感動した ありがとう
588:576
08/05/28 01:58:37
>>586
サブルーチン冒頭にて、引数リスト > デフォルト値(グローバル変数の値とか)
の優先順でmy変数値を設定したいことはよくあるから、
perlなら… perlならきっとすごくスマートに書く方法があるに違いない…
という夢を見たけど、幻だったみたいですね…
変数ひとつずつシコシコとunless definedを当てることにします。
589:nobodyさん
08/05/28 02:00:25
いや、日本語でおk
お前の望むようなことは確実にできると思うんだけど、
なにぶん言いたいことがよく分からんw
590:nobodyさん
08/05/28 02:16:48
my $global_foo = my $foo = 1;
my $global_bar = my $bar = 2;
# @_ =( );
@_ =( 3, 4 );
{
my $foo = defined( $_[0] ) ? $_[0] : $global_foo;
my $bar = defined( $_[1] ) ? $_[1] : $global_bar;
print "point 1: foo=$foo bar=$bar\n";
}
print "point 2: foo=$foo bar=$bar\n";
結局、最初に提案されてる回答をアレンジすれば、
>>582-584をシンプルかつ可読性も保ったまま実現できるんだが。
これじゃいかんの?
591:nobodyさん
08/05/28 02:25:18
>>590
そのへんが限界みたいですね…ありがとうございます。
私の欲求そのものが十分特殊だったのかな…
いま考えてる最善の形はサブルーチンを使うことです。
サブルーチンコールは負担かかりそうだからやりたくないんだけど…
sub merge_argument_and_default{
my ($argument, @default) = @_;
my @value;
while(1){
my ($a, $v) = (shift @$argument, shift @default);
my $c = ((defined $a) ? $a : $v);
last unless defined $c;
push @value, $c;
}
return @value;
}
sub foo{
my(@bar) = &merge_argument_and_default(\@_, @default_bar);
}
みなさんありがとうございました。
592:nobodyさん
08/05/28 02:30:59
殺してぇ……。日記じゃねぇんだよ。
593:nobodyさん
08/05/28 06:17:52
>>580
もう実装されてるよ?
URLリンク(search.cpan.org)
594:nobodyさん
08/05/28 06:40:31
>>576みたいに、自分のプライド保つために
当初の目的をすり替えて、自分は違うもの作ってました的な発言するやつは質問にくるなよ。
当初は「>>569をコンパクトにしたい」って言ってただけなのに、
どんな解が提示されても、
どんどん違う方向に勝手に転換して善意のレスすら流し読み。
こういう奴は、治らないから本当に放置すべきだと思うよ。
595:nobodyさん
08/05/28 07:18:42
>>594
それは違うんだけど、あなたへの説得は無理かな。
ひどく機嫌を損ねてしまったのは悪いと思ってるが。
いただいたありがたいアドバイスから、例えば今回は、
「サブルーチン化でもしなければ相当コンパクトに収めるのは難しいらしい」
「そのサブルーチンはこういう形で書くのがよいのだろうか」
などと、自分の知識や興味対象は移り変わっていくことが多いです。
ただ、このスレッドにはしばらく書き込みを自粛します。さよなら。
596:nobodyさん
08/05/28 10:11:34
典型的な"隠す人"だったか。
597:590
08/05/28 10:39:10
うわ、ちょっと離れたスキにすげぇ慇懃無礼なこと書いてやがる。
目的も明確にせず、そのへんが限界てw
そもそも次の疑問に移ったなら、その過程を説明するのが回答者への最低限の礼儀だろ。
社会出て苦労するよ。
ちなみに>>591は、俺ならこう書く。
sub merge_argument_and_default {
my ($argument, @default) = @_;
my %count;
$count{$_} = $default[$_] for( 0..$#default );
$count{$_} = ${ $argument }[$_] for( 0..$#{ $argument } );
return map { $count{$_} } sort keys %count;
}
598:nobodyさん
08/05/28 11:40:59
>595みたいなやつっているよね
言葉遣いが丁寧なだけで、いっぱしの大人だと思ってる人。
599:nobodyさん
08/05/28 12:04:01
sub merge_argument_and_default { map{ defined $_[0][$_] ? $_[0][$_] : $_[$_ + 1] ;} 0 .. $#{$_[0]} ; }
>>598
ガキなの見え見えなんだよねw
URLリンク(www2.atpages.jp)
の595を思い出した。
600:nobodyさん
08/05/28 13:55:09
>>593
そいえば5.10でてるんだっけ(汗
RHELとCentOSしか使ってないからすっかり忘れてました。
601:nobodyさん
08/05/28 15:44:58
5.10って絶対分かりづらいよw
5.8より昔のリリースだとしか思えない。
602:nobodyさん
08/05/28 15:51:58
Ver 5.008008
Ver 5.010000
こう書けばよいのか?
603:nobodyさん
08/05/28 16:09:29
5.1の方が新しいんですか?
知らなかったorz
604:nobodyさん
08/05/28 16:21:25
5.10.0 > 5.9.5 > 5.8.8 >> 5.1.0
苦肉の策なんだろうな……。
605:nobodyさん
08/05/28 17:55:49
perl6ってどうなったん?
606:nobodyさん
08/05/28 19:03:22
>>605
parrotの新しいのが最近でた気が・・・
607:nobodyさん
08/05/28 20:28:19
あるIPアドレスが変数$ipに格納してあります。
この$ipが存在するか、あるテキストファイル(ip.txt)を読んで
チェックしています。以下は例です。
$ipは"192.168.0.1"
ip.txtに192.168.0.1が記述してあります。
この場合マッチするようプログラムしてあります。
ip.txtに
192.168.0.0/24
または
192.168.0.0/255.255.255.0
と記述してあるものと
マッチさせたいのですが、
そういうサブルーチンは
ありますでしょうか?
簡単にいうと、あるIPアドレスが
サブネットマスクで指定してある
10進表記またはサイダー表記に
マッチするか判定したいのです。
ip.txtは10進表記でもサイダー表記の
どっちでも構いません。
608:nobodyさん
08/05/28 20:34:04
スレリンク(tech板:491-590番)
の543-544及び「IP pack unpack perl」でググれ。
609:607
08/05/28 20:59:40
>>608
あり♪
明日、見てみるよん
610:597
08/05/28 21:17:34
>>599
終わった話題なんだけど、ちょっと気になった。
めんどくさかったら、スルーして。
提示してくれてるルーチンだと、
引数1 @array1 = ();
引数2 @array2 = ( 1,2 );
のとき、返り値が空になっちゃうよね。
配列1(引数1) > 配列2(引数2) という優先順位で、
配列3(返り値)を混ぜ合わせるというのが目的の処理だと思うんだけど、
配列1と配列2で要素数の大きい配列を、要素数だけループさせる処理にする場合、
キレイにまとめる方法ってないかなぁ?
if( ( $#array1 <=> $#array2 ) == -1 ) {
EXPR for( 0..$#array2 );
} else {
EXPR for( 0..$#array1 );
}
みたいな、冗長な方法しか俺には思い浮かばなかった。
だから、「配列の重複値をハッシュを利用してマージ」の応用みたいなことを>>597でやってみたわけだ。
なんか美しい方法あればいいんだけどなぁ。
611: ◆TWARamEjuA
08/05/28 21:20:10
(´-`).。oO(Net::CIDRでよさそうな。。。)
612:597
08/05/28 21:26:18
my @temp = ( $#array1 <=> $#array2 ) == -1 ) ? ( 0..$#array2 ) ; 0..$#array1;
こんな前処理してから、>>599のmap対象配列に、( 0..\$temp ) って感じかなぁ?
エレガントさには欠けるけど、これが可読性保つギリギリかな?
613:597
08/05/28 21:28:46
動作確認してないからtypoしまくり。まぁ分かるよね?(苦笑
614:607
08/05/28 21:31:18
>>611
私へのレスですね。
明日調べてみます
615:599
08/05/28 22:23:24
>>610
ああ、
@array1 = ( undef, undef ) ;
は考えてたけども、それは想定してなかったw
>>612の解で良いんじゃね? 助長を厭わないならば、
map{ 略 } 0 .. $#{$_[0]} , 0 .. $#_ - 1 ;
っつー荒技もw
自分のスクリプトじゃ絶対やんないけどね。
616:599
08/05/28 22:27:21
>>615
s/助長/冗長/
617:nobodyさん
08/05/29 03:05:45
mapがいまいち理解し切れなくて使ってないんだが覚えとくべき?
覚えると便利そうだけど。
618:nobodyさん
08/05/29 03:45:40
やってることは、forやforeachと変わらん。
違うっていえば、{}の中を、引数リストのそれぞれの要素で実行した結果をリストとして返すってとこか。
かなり便利な局面もある。覚えとくべきだとは思う。
@res = map{ $_ + 10 } (1,2,3,4,5) ;
print join("\n",@res);
---結果---
11
12
13
14
15
619: ◆TWARamEjuA
08/05/29 07:02:31
my $Now_Date = sprintf qq|%04d/%02d/%02d %02d:%02d|, map {
$_->[0] += 1900;
$_->[1]++;
@$_;
}[(localtime)[5,4,3,2,1]];
2008/05/28 07:02
って出るかと思う。
620:nobodyさん
08/05/29 08:23:18
>>617
シュワルツ変換という定番sort手法には必須だよ。
ぐぐって、foreach 文で書いてみたらありがたみが分ると思う。
>>619
お前さんの例は頻繁にとんでもなく斜め上を行くなあw
なんで一要素しかないと分りきってる無名配列を作って map の例にする?
do ならいざしらず
perl -le 'my $Now_Date = sprintf qq|%04d/%02d/%02d %02d:%02d|, do{
@_ = (localtime )[5,4,3,2,1] ;
$_[0] += 1900 ;
$_[1] ++ ;
@_ } ;
print $Now_Date ;'
それ以前に普通は↑こんな面倒な事しないだろ?
perl -MPOSIX=strftime -le '$str =strftime "%Y/%m/%d %H:%M", localtime; print $str, "\n"; '
621:607
08/05/29 17:51:57
Net::CIDR::cidrlookupでうまくいきそうなのですが、
IPアドレスのチェックを行いたいと思ってます。
ググると、以下の様な正規表現がありますが、
\d(バックスペース)の意味が分かりません。
どういう意味なんでしょうか?
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
622:nobodyさん
08/05/29 17:53:57
0-9
623:607
08/05/29 17:54:42
すみません。
\dは数字でした。
申し訳ない
624:607
08/05/29 18:10:05
またまたお願いします。
正規表現で/をマッチさせたいのですが、
以下であってますでしょうか?
$hoge =~ /\//
625:607
08/05/29 18:11:58
すんません
\/で、いけるみたいです。
お騒がせしました。
626:nobodyさん
08/05/29 18:15:31
$hoge =~ m(/);
すこしは綺麗?
627:nobodyさん
08/05/29 18:19:11
>>617だけどレスありがとう。
シュワルツ変換とかまだいまいち理解できないけど良さそうだね。
sortは結構使うから思い処理の部分で使うのはいいかも。
でも問題は後で読み直して何してるか理解できなくなりそうな所だな。
628: ◆TWARamEjuA
08/05/29 20:45:58
>>620
つっこみおおきに♪
mapを覚えちゃってからどんどん斜め上に逝っちゃいました。
ひとまず車輪の再発明は大好き♪
629:nobodyさん
08/05/30 02:09:30
曲芸はほどほどに
630:nobodyさん
08/05/30 08:17:40
出来た物が車輪じゃない上に使えないのならただの無駄
631:nobodyさん
08/05/30 10:14:07
車輪を作ろうとしたら鎖鎌が出来ちゃった感じだな
632:nobodyさん
08/05/30 10:19:32
まーmapは便利だってことだ
633:nobodyさん
08/05/30 11:57:18
XML::DOMを使ってXHTMLに広告を挿入するCGIを書いたのですが、use encoding "utf8";
を書くとローカルで文字化けしてしまいます。これをコメントアウトすると
XREA.COMのサーバ上でScript Errorが発生してしまいます(しかもエラーログが見られない)。
ローカルでもXREA.COM上でも動くようにしたいのですがどうすればいいでしょうか。
コードはこんな感じです。
#!/usr/bin/perl
use strict;
use XML::DOM;
use encoding "utf8";
my $xhtml_file = $ENV{'PATH_TRANSLATED'};
my $parser = new XML::DOM::Parser;
my $doc;
eval { $doc = $parser->parsefile($xhtml_file) };
if($@) {
print "Content-Type: text/plain;charset=utf-8\n\n";
print "parsing error occured: $@";
exit;
}
# 広告挿入処理
print "Content-type: application/xhtml+xml;charset=utf-8\n\n";
print $doc->toString;
$doc->dispose;
ローカルの環境はUbuntu 8.04 + Perl 5.8.8 + Apache 2.2.8、
XREA.COMはよくわかりません。
634:nobodyさん
08/05/30 12:22:33
>>632
だれも「mapが不便」なんて言ってないがな
明らかにバッドノウハウなコードを曝してる奴をくさしてるだけで
635:nobodyさん
08/05/30 12:23:13
すみません。自己解決しました。use encoding "utf8";をコメントアウトして
utf8::is_utf8($doc->toString) ? print encode('utf-8', $doc->toString) : print $doc->toString;
とすればいいみたいです。utf8フラグというのが関係しているみたいなので、
調べてみます。おさわがせしました。
636:nobodyさん
08/05/30 12:40:26
>>635
これはマジメに調べまくった方がいい。
慣れるまでPerl5.8以降でハマる最大の原因。
637:nobodyさん
08/05/30 12:50:11
BOM付けてたりして・・・
638:nobodyさん
08/06/01 07:19:24
BOMBなら付いてますw
639:nobodyさん
08/06/02 12:34:35
Wed, 12 Mar 2008 21:20:11 GMT
Last-Modified↑これをtimeの値に変換する方法を教えてください。
3600秒以内とかの判定に使いたいので。
640:nobodyさん
08/06/02 12:49:16
>>639
timelocal
641:nobodyさん
08/06/02 12:57:39
>>640
ありがとうございました!
642:nobodyさん
08/06/02 13:51:21
こんな感じで出来たのですが凄く格好悪いです。
$mon = 1 if $mon eq 'Jan';とか。
スマートな例があったら参考の為に見せてください。
sub last_modified {
my $time = shift;
my($day, $mon, $year, $hour, $min, $sec);
if ($time =~ /\w+, (\d+) (\w+) (\d+) (\d+):(\d+):(\d+) GMT/) {
($day, $mon, $year, $hour, $min, $sec) = ($1, $2, $3, $4, $5, $6);
$mon = 1 if $mon eq 'Jan';
$mon = 2 if $mon eq 'Feb';
$mon = 3 if $mon eq 'Mar';
$mon = 4 if $mon eq 'Apr';
$mon = 5 if $mon eq 'May';
$mon = 6 if $mon eq 'Jun';
$mon = 7 if $mon eq 'Jul';
$mon = 8 if $mon eq 'Aug';
$mon = 9 if $mon eq 'Sep';
$mon = 10 if $mon eq 'Oct';
$mon = 11 if $mon eq 'Nov';
$mon = 12 if $mon eq 'Dec';
} else {
die "Error: $time\n";
}
$time = timelocal($sec,$min,$hour,$day,$mon-1,$year);
return $time;
}
643:nobodyさん
08/06/02 14:47:28
>>642
%mons = (
Jan => 1, Feb => 2, Mar => 3, Apr = 4, # ……以下省略
);
$mon = $mons{$mon};
とかどうよ?
644:nobodyさん
08/06/02 15:22:18
>>643
ありがとうございます。
連想配列は普段全く使わないので、この機会に試してみます!
645:nobodyさん
08/06/02 15:44:50
>>643は、どうせ後で1引くのに、どうしてわざわざ1足すのさ?w
646:nobodyさん
08/06/02 16:15:30
>>645
ほんとだ><
お前頭いいな
すみません><
647:nobodyさん
08/06/02 17:46:33 VCfcjQkN
CPANを使わずにモジュールを使いたいのですが、なかなかうまくいきません。
HTML::Template を使いたいのですが、
ローカルにインストールしている、
C:\Perl\cpan\build\HTML-Template-2.9\Template.pm
というファイルを、以下のcgiと同ディレクトリにコピーしました。
#!/usr/local/bin/perl
use strict;
use lib qw(.);
use HTML::Template;
print "Content-type:text/html\n\n", "test";
ですが、うまくいかないようです。
use lib qw(.); の部分を、
unshift @INC, '.';
などとしても不可能でした。
ググっても上記の方法ぐらいしか出てこないんですが、何がいけないか教えていただけますでしょうか。
Perl のバージョンは 5.00503 です。
648:nobodyさん
08/06/02 17:51:49
Template.pmをHTMLというディレクトリを作ってそこにいれる
649:nobodyさん
08/06/02 18:08:23 VCfcjQkN
>>648
ありがとうございます。
助言どおりHTML ディレクトリにTemplate.pmを入れて、エラーが出たので、
Digest::MD5がどうだとかエラーが出ました。
同じ要領で、Digest ディレクトリを作り、MD5.pmを入れると、
次はXSLoader.pmが必要らしく、それもcgiと同ディレクトリに入れました。
次はDynaLoader.pmがどうとかエラーが出たので、それも同じディレクトリに入れたのですが、
今度はエラーが消えませんでした。。
最終的にCGI::Carpがはいたエラーは以下です。
[Mon Jun 2 18:01:45 2008] Template.pm:
[Mon Jun 2 18:01:45 2008] Template.pm:
[Mon Jun 2 18:01:45 2008] MD5.pm:
[Mon Jun 2 18:01:45 2008] MD5.pm:
[Mon Jun 2 18:01:45 2008] DynaLoader.pm: Can't locate loadable object for module Digest::MD5 in @INC
(@INC contains: /usr/lib/perl5/5.00503/i386-linux /usr/lib/perl5/5.00503 /usr/lib/perl5/site_perl/5.005/i386-linux /usr/lib/perl5/site_perl/5.005 .) at HTML/Template.pm line 915
[Mon Jun 2 18:01:45 2008] Template.pm:
[Mon Jun 2 18:01:45 2008] Template.pm: BEGIN failed--compilation aborted at HTML/Template.pm line 915. BEGIN failed--compilation aborted at test.cgi line 6.
650:nobodyさん
08/06/02 18:17:18
CPAN にモジュールの関連性とか書いてなかったっけ?
651:nobodyさん
08/06/02 18:18:22
関連性とかじゃなくて依存のこと
652:nobodyさん
08/06/02 18:25:00 VCfcjQkN
URLリンク(q.hatena.ne.jp)
↑必要としているモジュールは違うものの、
この人と同じ状況なのかな、と思うんですがどう思いますか?
同じ状況だとすると、不可能ですよね
FTPであげることしかできませんので。。。
653:nobodyさん
08/06/02 18:41:40
呼び出されてるDLLがWin用のコンパイル済みDynaLoader.pmを、Linuxにそのままコピーしたんでしょ? たぶん。
Linuxでコンパイルし直さないとムリ。よってムリ。
654:nobodyさん
08/06/02 18:45:29 VCfcjQkN
あぁ・・・やはり無理ですか。
5.00503で使えるHTML::Templateの代わりのようなものがほしいんですが、
どこを探せばいいでしょうか。
何度も申し訳ありません。
655:nobodyさん
08/06/02 18:52:18 VCfcjQkN
HTML::Templateの昔のバージョンとかなら5.00503でも動きますかね?
656:nobodyさん
08/06/02 18:56:19
その知識だと、HTML::Templateなんて必要ないじゃん!的な使い方しかしてしないと予想されるので、
自前でテンプレート化した方が早い。
スキン対応と銘打ってる配布CGIのソース読んだ方が早い気がする。
657:nobodyさん
08/06/02 18:59:25
HTML をテンプレート使って出力するようにすると病み付きになる
658:nobodyさん
08/06/02 19:03:56
5.005のこと詳しくしらないけど、DynaLorderとかって、標準で入ってないの?
ってか、>>649の内容を見るに、DynaLorderでわなくて、Digest::MD5(.so)が無いんでないの?(これも標準でない?)
まあなければ、Digest::MD5はXSモジュール含んでるから、
そのサーバー上でコンパイルし直さないと実行できないのは、>>653と同じ意見だけど。
659:nobodyさん
08/06/02 19:07:00 VCfcjQkN
PerlってHTMLと親和性ないですよね~。
テンプレート使えないとなると、めんどくさくなるけど、まぁがんばります。
ありがとうございました。
660:nobodyさん
08/06/02 19:49:04
自分の未熟さを言語のせいにするなよw
HTMLと最も親和性のある言語として、Perl/CGIが一世風靡しただろ。
661:nobodyさん
08/06/02 19:51:49
>>657
kwsk
662:nobodyさん
08/06/02 19:59:46
>>661
ちょっとかじった程度の人でもデザイナーとプログラマを切り分けられる利点がある
663:nobodyさん
08/06/03 00:57:17 etSjPPZK
PostやGetで送られてきたURIエンコードをデコードしてハッシュに確保するような
プログラムを作ったのですが
HTMLのformでenctypeをmultipart/form-dataにすると
送られてくるデータの形式が変わってしまって
うまくハッシュに確保することができなくなっちゃいました。
送られてきたデータが
multipart/form-dataなのか
application/x-www-form-urlencodedなのか
調べる方法ってありますか?
ついでに、multipart/form-dataで送られてきたデータの扱い方を
まとめてあるサイトとかありましたら教えてほしいです。
664:nobodyさん
08/06/03 01:01:53
multipart/form-data って文字があるのか application/x-www-form-urlencoded って文字があるのかで簡単に判別着く
multipart/form-data の処理は CGI.pm 使ってね♪
665:nobodyさん
08/06/03 01:12:56
>>663
CGI.pm ならどちらの形式でも意識せず受け取れる。
URLリンク(perldoc.jp)
自前実装したいのなら
URLリンク(www.studyinghttp.net)
URLリンク(www.asahi-net.or.jp)
URLリンク(www.studyinghttp.net)
666:nobodyさん
08/06/03 01:24:31 etSjPPZK
>>665
ありがとう!
667:nobodyさん
08/06/03 01:58:53
>>659
テンプレートエンジン、自分で作るという手もある。
そんなに難しくないよ。
Compositeパターンでも使えば。
668:nobodyさん
08/06/03 09:41:38
>>659
HTML をふつうに書く
HTML なかに <%BODY%> とか、挿入場所を示す識別子をいくつか用意して書き込む
プログラムからテンプレート HTML を読み込む
正規表現で置換
たったこれだけです。
669:nobodyさん
08/06/03 11:07:04
Template::Toolkitならともかく
HTML::Templateは単純な処理だしね
さくっと使いたい時には便利、無けりゃ無いでどうにでもなる
670:nobodyさん
08/06/03 12:56:41 K4KbdDUT
Perlでindex.cgiを作って
そのCGIですべてを管理するような仕組みを作った場合
やっぱindex.cgiにアクセスが集中してよくなかったりするんですか?
671:nobodyさん
08/06/03 13:31:41
index.cgi で処理させる内容を挙げてくれないとまったくわからない
自分は普通のエディタ (関数へのジャンプとか無くて色分けだけ) なので
まったく違う処理はファイル分けてる
672:nobodyさん
08/06/03 17:01:51
多分聞きたい事って、hoge1.cgiとhoge2.cgi…hoge100.cgiとかあったら
それぞれ頭で同じ事やってるから、all.cgi(index.cgi?)に全て
まとめられないか?って事じゃないのかな?
my $cgi = CGI->new();
my $config = init();
if( $cgi->param('mode')eq'hoge1' ) {
require 'hoge1.pl';
hoge1::main($config);
} elsif( $cgi->param('mode')eq'hoge2' ) {
require 'hoge2.pl';
hoge2::main($config);
…って、感じで。漏れも昔、初心者だった時に同じ事を思った。
答えは、当然all.cgi(index.cgi?)の呼び出しのオーバーヘッドは
全CGIの呼び出し回数倍増えるよ。
そういう事じゃなくて??
673:nobodyさん
08/06/03 17:44:51
>>670
俺それやってる
wikiみたいに書けるテキストファイルを自動で携帯/PCに最適化してValid XHTML出力する、みたいな。
674:nobodyさん
08/06/03 17:56:29
bloxsomだっけ?
675:nobodyさん
08/06/03 19:41:27
perl関連のプロジェクトは企画倒れが本当に多いね。
企画倒れというより、制作者が途中で飽きて、ブームになっても、そのまま放置……みたいな。
かのCPANだって、一部のモジュール以外は、姥捨山みたいになってる。
古いモジュールに、パッチ送ってもメール不達とか多すぎるんだよ!
676:nobodyさん
08/06/03 20:52:43
URLリンク(www.drk7.jp)
ここの 東京の xml から加工を行っています。
最終的には明日の天気を出力したいのですが、以下のコードを書いたところ
気温や降水確率が出力されなくて悩んでいます。
================================================
use XML::TreePP;
use strict;
my $tpp = XML::TreePP->new();
my $tree = $tpp->parsefile( '13.xml' );
print $tree->{weatherforecast}->{pref}->{area}->[1]->{info}->[1]->{weather} , "\n";
print $tree->{weatherforecast}->{pref}->{area}->[1]->{info}->[1]->{temperature}->{range}->[1];
================================================
{range}->[1] で %hash と言われてしまうのはどうしてでしょうか。
その後に [1]->{-centigrade} をするとこの場合は min が出てくるのは判っています。
677:nobodyさん
08/06/03 21:13:48
[1]->'#text'
ダンプしろよ
678:nobodyさん
08/06/03 21:21:10
print $tree->{weatherforecast}{pref}{area}[1]{info}[1]{temperature}{range}[1]{#text}
manual嫁。
あと、XMLの中にareaやinfoやrangeの要素が1つしか無い場合に配列要素に
ならないのがTreePPの仕様なので、例えばinfoが1要素しか無い場合は
print $tree->{weatherforecast}{pref}{area}[1]{info}{temperature}{range}[1]{#text}
とアクセスしなくてはいけない。オプションで回避できるけど。
679:670
08/06/03 22:25:48 etSjPPZK
言葉が足りんでした。スミマセン。
>>673
ちょっと俺の勉強不足で言ってることがよくわからないけれど
例えばindex.cgi?page=homeだとhome.htmlをcgiプログラムが引っ張ってきて表示する
みたいな仕組みを作った場合、
どのユーザーがどのページを見てもindex.cgiに必ずアクセスするわけじゃない?
てことはページが1000ページとかできたとして
いろんな人がいろんなページを見出したらindex.cgiのアクセスが集中して
なんかまずいことになったりしないのかなって思ったの。
教えてLarry!!
680:nobodyさん
08/06/03 22:40:04
つか、ほとんどのWEBアプリケーションは、特定ファイルに負荷集中するがな。
681:670
08/06/04 00:28:11 KcodebuX
>>680
あ、じゃあ余計な心配しなくて大丈夫かぁ
682:nobodyさん
08/06/04 01:09:20
つ mod_perl
683:nobodyさん
08/06/04 05:38:01
A:opendir でファイル一覧を取得する
B:予めファイル一覧をそれ用のメモファイルに書き出しておいてそれを読みこんで取得
AとBではどちらが負荷が少ないですか?
684:nobodyさん
08/06/04 06:05:53
自分で調べられる手間を人に仮託するな。
685:nobodyさん
08/06/04 08:14:25
>>670
>>672に答えが書いてあるのだが、何故それを無視する?
686:nobodyさん
08/06/04 10:13:14
どなたか教えてください。
掲示板のタイトル一覧取得を現在作っています。
それでタイトルがもし長かった場合、最初の9byteだけを表示するようにしたいのですが・・・
if (length($title) > 9) { $get = substr($title[3],0,9); }
以上のようにしてしまうと、9byte目に全角文字が来た場合文字化けしてしまいます。
例えば、
$title = "testtesttest"; この場合は $get = testtestt
$title = "テストテスト"; これだと $get = テストテ爛
こういった文字化けを回避するような、いい方法は無いでしょうか?
687:nobodyさん
08/06/04 10:15:53
jfold
688:686
08/06/04 10:27:56
2分での光速のお返事ありがとうございます。
調べてみたところ、Jcode.pmのモジュールみたいですね。
今までずっとjcode.plばっかだったので知らなかった…
さっそく試してみます。
どうもありがとうございました。
689:670
08/06/04 13:24:15 44uKn/lk
>>685
スミマセン基地外でした。
690:nobodyさん
08/06/05 00:08:18 S7Nj2GEO
ところでさ…何故elsifなんだと思う?
どうせならifにあわせてelとefとか2文字にしてほしかったん
691:nobodyさん
08/06/05 00:28:25
ごめんなさいごめんなさい
692:nobodyさん
08/06/05 22:21:15
Cか何かでやってる人いたな。
693:nobodyさん
08/06/05 23:21:13
最近5.10を使うようにしてんだけどgiven-whenが馴染めない
switch-caseでいいと思うのになんでgiven-whenにしたのかな?Switch.pmがあるから?
694:nobodyさん
08/06/06 01:28:23
>>693
スレリンク(php板:85番)
Perl の自然言語的体裁には switch-case より given-when の方が
よりしっくりくるかもね。
695:nobodyさん
08/06/07 20:54:21 8brPzE2o
URLリンク(www.vid-dl.net)
このサイトに
URLリンク(v.youku.com)
を入力するとリンク先が4つほどでます。
これを自分でもPerlCGIで再現したいんですが、4つのリンク先をどうやって出してるのかわかりません。
HTMLのソースを見る限り4つないんです。
ないものを何かを元にして解析?してるようです。
4つの違いは以下です
URLリンク(f.youku.com)までは一緒以下が
0200640400482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9
0200640401482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9
0200640402482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9
0200640403482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9
です。
<a charset="400-002-2-4" href="javascript:sendVideoLink('XMjc3MDQ1MzI=','0200640400482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9');">??</a>
これが大本でこれを解析してるんでしょうか。
こういうのはどうやって解析すればいいのでしょうか?
よろしくお願いします。
696:nobodyさん
08/06/07 21:00:16
一部の0に1足してるだけじゃないの?
697:nobodyさん
08/06/07 21:25:47 8brPzE2o
>>696
ですが4つとは限らないんです。
このビデオは4つですが、者によっては8つとかになります。
それをどうやって特定してるのかがわかりません。
698:nobodyさん
08/06/07 21:33:39
>>697
youkufireかなんかAPI使ってるんだろ。
Perlとは関係ないな。
699:nobodyさん
08/06/07 21:43:36 8brPzE2o
>>698
???
それではyoukufireではどうやってやってるんでしょうか?
こういうのってどういうスレに行くと知ってる人がおられるのでしょうか?
フラッシュ関連なのでしょうか?
自分はPerlをかじる程度しか知らないのでついここに来てしまったのですが。
アドバイスお願いします
700:nobodyさん
08/06/07 22:34:21
HTTPに関して勉強して下さい。
全くのスレ違いです。
701:nobodyさん
08/06/07 22:55:37 8brPzE2o
http???
他で質問してみます。ありがとうございました。
702:nobodyさん
08/06/07 23:03:35
いや、どこで質問しても無駄だと思うよ。
結局、HTTPレスポンスを解析する必要があるから。
そして、HTTPレスポンスの意味を把握するには、
sidなどユニークなIDのパターン解析と
youkuで使われてるファイル取得swfの内部解析も必要。
この意味が分からない次元じゃ、到底ムリ。
703:nobodyさん
08/06/07 23:36:39 8brPzE2o
なるほど。
URLリンク(www.kasai.fm)
URLリンク(www.kasai.fm)
からとりあえずそのhttpレスポンスとやらを実際に見てみようと思いましたが。
どうもCan't locate BASE64 in @INC エラーがでまして。
このモジュールをactiveperl5.8.1のppm(リポジトリは初期状態のまま1つです)でいれようとしましたが
ない模様です。
MINE::Base64って自分でコンパイル?でしたっけができないとダメなものなのでしょうか。
704:nobodyさん
08/06/07 23:53:12 8brPzE2o
すいません
getHTTPの
#use MIME::Base64;
require('BASE64');
を
use MIME::Base64;
#require('BASE64');
にしたらエラーが出ませんでした。動いてるかはわかりませんが。
705:nobodyさん
08/06/08 00:05:22
MIME::Base64は標準モジュールだ。
というか、質問内容が初心者未満の単なる教えて君だぞ。
最低限、ドキュメント読むかググってから書き込め。
706:nobodyさん
08/06/08 00:14:24 Mcg1bojL
そうなんですか。とりあえずperlでwebページを読み込む実験は成功しました。
そこからフラッシュのURLを抜き出すところまではできそうです。
>sidなどユニークなIDのパターン解析と
>youkuで使われてるファイル取得swfの内部解析も必要。
これを検索とか意味を探してきます。
707:nobodyさん
08/06/08 14:55:02
オブジェクトにメソッドを足すにはどうしたらいいでしょうか?
package foo;
*{foo::hoge::bar} = sub {1};
$hoge = foo->hoge;
$hoge->bar();
Can't locate object method "hoge" via package "foo"
アレ?
708:nobodyさん
08/06/08 16:56:29
>>707
基本から一通り勉強し直したらいいんじゃないかな。
URLリンク(www.kt.rim.or.jp)
URLリンク(www.kt.rim.or.jp)
709:nobodyさん
08/06/08 18:03:33
>>708
サンクス
最後のページ
Summary
なすべきこと。今、あなたは部屋を出てオブジェクト指向方法論に関する書籍を購入して、そして六ヶ月かそこらの間悩む必要があるでしょう。
ワロタ
710:nobodyさん
08/06/08 18:41:29 NYonUevm
うーん継承させても
hoge {
$this = shift;
return $this;
}
bar{1}
hoge->bar()ってやったら呼べるんだけどbarはhogeと同じ空間にあるのが変というか
つまり単純化するとこんな感じ。
*{foo::hoge::bar} = sub {1};
print foo->hoge->bar(); エラー
print foo::hoge::bar->(); 動くが気もい
*{foo::hoge::bar} = sub {1}; #もっとキモイ
$top = foo::hoge;
print eval ($top ."::bar");
勉強してきます
しかしあんま資料ないっぽい
711:nobodyさん
08/06/08 18:52:18
OOPじゃなくて、perlの基本からやり直しては。
*{foo::hoge::bar} じゃなくて *{foo::bar}
hogeなんていうpackage作ってないし。
712:nobodyさん
08/06/08 19:09:16
> hogeなんていうpackage作ってないし。 !
それだ! ありがとうやっとわかったよ。
てっきり package a::b::c;
ってやると
a
a::b
a::b::c
ってのが自動的に生成されると思ってた。
713:nobodyさん
08/06/08 20:02:49
パッケージじゃなくてオブジェクトに生やしたいの?
見かけ上はできるけだろうけどPerlのオブジェクトは名前空間に変数結び付けてるだけだからなあ
と思ったけどもう一度勉強した方が良さげだね
714:nobodyさん
08/06/08 20:20:35
Perl DBI MySQL
CGIであるデータをホームページ上に表示することをやっています。
5000件ほどのデータをfetchrow_arrayで1行ずつフェッチしていますが
どうもフェッチ処理に時間がかかっているようです。
実際に必要なのは20件ほどで、他はページ送りで表示可能。
検索エンジンの検索結果ページなんかをイメージしていただければ。
そこで、不要なフェッチを無くすために、
複数行を飛ばしてフェッチすることってできますか?
もし他に改善策があれば教えてください。
一応、SELECTの段階で20件だけを取り出す方法を思いつきました。
715:nobodyさん
08/06/08 20:39:35
>> 714 @array の展開はコスト食うのでやめたほうがいいかもね。
@arrayの高速操作が必要ならスライス操作とか調べてみると吉
SELECTで絞れるなら断然そっちのほうが早いと思うよ。
716:nobodyさん
08/06/08 22:10:54
>>715
ありがとうございます。
スライス操作調べてみました。SELECTでLIMITつければいいんですかね?
これで必要な分だけのフェッチですみましたが、どうも時間がかかるようです。
ちょっと複雑なSQL文なんでそっちのほうがボトルネックのようですorz
SQL文のほうを考え直そうと思います。
717:nobodyさん
08/06/09 12:35:45
SELECT SQL_CALC_FOUND_ROWS * FROM $table LIMIT ( $page*20+1 ), 20;
SELECT FOUND_ROWS();
>>715
>>716はSQLの話じゃなくて、
大規模の配列使うなって話で、
my @temp = splice( @array, 0, 20 );
的なことでしょ。
SQL文はスレ違い。
718:nobodyさん
08/06/09 15:41:11
もうメンドクセーから、bind_columns()とfetch()にすれば?
生えーぞ。
719:nobodyさん
08/06/09 16:00:10
生いいよね
720:nobodyさん
08/06/09 19:29:41 BYZvhcIN
LIMITしらねーとか そんなレベルなら
其の都度ひっかかって質問するより勉強したほうがはやいよ
リファレンスページみっけてプリントアウトしとけ
721:nobodyさん
08/06/09 23:24:50
122
11
11000
↑これをソートすると
11
11000
122
↑こんな風になってしまいます。
11
122
11000
↑こんな感じで大きい順にソートする方法を教えてください。
722:nobodyさん
08/06/09 23:26:19
sort { $a <=> $b } ( 122, 11, 11000 ) ;
723:nobodyさん
08/06/09 23:36:47
>>722さん、ありがとうございました。
724:nobodyさん
08/06/13 02:38:01
ファイルのアップロードについて質問です
*** form.html ***
<input type="file" name="gazou1">
<input type=その他 ...>
*** form.cgi ***
use CGI;
$q = new CGI;
@names = $q->param();
foreach $name (@names) {
$value = $q->param($name);
if (input type が file だったら ) {
ファイル受信処理
}
なんらかの配列に格納
}
と、したいのですが、
inputのtypeは調べられないのでしょうか?
inputのnameで判断するしかないのでしょうか?
725:nobodyさん
08/06/13 09:17:11
>>724
ブラウザから渡されるデータ自体に type 属性の値が含まれて
いないのだから、CGI プログラム上から調べる事はできない。
ref $value でアタリを付ける事はできる。
URLリンク(perldoc.jp)
URLリンク(perldoc.jp)
(「ファイル・アップロード・フィールドの作成」の項)
726:nobodyさん
08/06/13 10:25:57
@id には ( '101','106','112','130','150') などと入っており
$unit->{101}->{point} = 2.5;
$unit->{130}->{point} = 6.2;
$unit->{150}->{point} = 3.2;
と代入してあります
このポイント(2.5、6.2等)を元にして@idをソートしたいのですが
@id = sort { $unit->{$_}->point <=>$unit->{$_}->point } @id
とまで考えて、$aや$bをどのように使ったら良いのか分らなくなりました
よろしかったらどのように表記したら良いのか教えてください
727:nobodyさん
08/06/13 10:51:23
>>726
>>3
728:726
08/06/13 11:00:28
ありがとうございます
Perlメモはいつも参考にさせて頂いてまして
・複数の項目でソートする
・自分で決めた順番でソートする
の応用でなんとかなるかと思ったのですが
どうにも分らずこちらでお伺いしました次第です
どの辺りを応用すればよろしいでしょうか?
729:726
08/06/13 11:18:24
・複数の項目でソートするを応用して(まんまかも)
先にmapでポイントの配列を作る事でなんとか出来ました
@id = map { $_->[0] } sort { $b->[1] <=> $a->[1] } map { [$_,$unit->{$_}->{point} ] } @id
ありがとうございました
そしてお騒がせ致しました
730:nobodyさん
08/06/13 11:37:27
@id = sort { $unit->{$a}->{point} <=> $unit->{$b}->{point} } @id
731:724
08/06/13 12:09:38
>>725
やはりtypeは知りようがないのですね。
ご回答ありがとうございました。
732:726
08/06/13 12:41:47
なるほど、$_ がキーになる場合はそこが$a,$bの対象になるんですね
コードがすっきりしました
>>730さん、ありがとうございます
733:nobodyさん
08/06/13 12:51:42
>>732
sortでなんで$_がでてくるのかわからない。$aと$bしかないだろ。
grepやmapと混乱してないか?
734:726
08/06/13 13:06:56
Perlメモのを応用しようとしていじくりまわして
>>726のソースに間違えて辿り付いたので勘違いしてました
てっきり配列の要素を引っ張り出したらそれが$_になるのかと・・・
で、$a,$bはそれが直接比較の対象にならないといけないのかと勘違いしてました orz
735:nobodyさん
08/06/14 03:33:00
俺も今多次元ハッシュ使ってるけどコツがわかると便利で気に入ってる。
736:nobodyさん
08/06/15 00:12:38
ちょっとした構造体風の物を作るのにいいよね
リファレンスで受け渡しも簡単だし
737:nobodyさん
08/06/15 01:14:21
WinXPPro+Cygwin、iswebでperlを作成しています。
普段は問題なく動いているのですが、自宅で試したperlをiswebにアップロードする作業が面倒でたまりません。
そこで質問なのですが、
#!/usr/local/bin/perl
とかの表記を書き換えずとも、上記二つの環境の両方で動くように出来ないでしょうか。
毎度毎度アップロードするときに、全cgiを書き換えているので、そこだけでも何とかしたいんです。
もしくは、専用のFTPソフトみたいなので、アップと同時に書き換えてくれるような奴があると良いなぁって思ってます。
どなたか、よろしくお願いいたします。
738:nobodyさん
08/06/15 01:43:19
それこそローカルと同期させる専用FTPクライアントをPerlで作れよw
Net::FTP使えば、30分程度で作れるだろ。
739:nobodyさん
08/06/15 01:43:42
っ coLinux
っ ActivePerl をC:\usr\local\以下にインストール
っ 「メンドクセーっ! 頭 #!perl に統一してやんよ。」(Path通ってなかったら知らん)
740:738
08/06/15 01:45:20
単純にPerlのパスが違うって問題なら、
XPでエイリアス作れるようにするソフト使って、iswebに合わせればいい。
741:nobodyさん
08/06/15 01:52:33
>>737
■サーバー
#!/usr/local/bin/perl
require "example.cgi";
■ローカル
#!C:/perl/bin/perl
require "example.cgi";
これなら、example.cgi をアップするだけでOKです。
(意味が違うでしょうか??)
742:nobodyさん
08/06/15 02:10:08
>>738-741
どうも、有難うございます。
>>741さんのが一番楽そうなので、それでいこうと思います。
どうもありがとうございました。
743:nobodyさん
08/06/15 14:41:47
Perlでコードを書き始めたばかりの物なのですが、基本が少し分からないので質問させて下さい。
PerlでCGIを作っているのですが、いくつかのフォームから入力を取ろうと考えています。
フォームが一箇所ではないので(検索や書き込み、削除等)、送られて来る処理が全く違うため、
送られて来たフォームによって処理を変えたいです。
例えば、検索ならこの関数、書き込みならこの関数、のように分けたいのですが、どのように
実装するのがスマートな方法でしょうか?
考えているのはhiddenで、フォーム別の値を持っておきその値によって分岐しようと思っている
のですが、他にスマートな方法があれば知りたいです。
宜しくお願いします。
744:nobodyさん
08/06/15 14:43:16
>hiddenで、フォーム別の値を持っておきその値によって分岐
これが一番一般的で分かり易いと思うよ
745:nobodyさん
08/06/15 15:43:06
ところでお前ら、
postとらgetを使うときのデバッグってどうしてる?
コマンドラインからPOSTを設定する方法とかあるの?
めちゃめちゃ大変なんだが
746:nobodyさん
08/06/15 17:13:16
>>743
仕様によりますが、動作の種類によって、
スクリプトそのものを分けてしまうのはどうでしょう。
747:nobodyさん
08/06/15 17:51:51
受け取った値も表示するようにするかテキストに吐かせてるだけだけど、
そんなに面倒?
748:nobodyさん
08/06/15 17:55:33
何をやってるのかよくわかんないけど、どうやってコーディングするかという問題より、
postでもgetでも、与えられる引数をちゃんとチェックすることで、自然と動作の分岐が行えると思うんだけど
749:nobodyさん
08/06/16 02:30:03
質問者の想定とは違うかもしれないが、
| ̄ ̄ ̄ ̄| [検索] [管理] [ほげほげ]
 ̄ ̄ ̄ ̄
みたいな感じなら、submit に文字列を仕込むという方法が。
750:nobodyさん
08/06/16 10:59:18
でも文字化けという問題が...
ラジオかセレクト使えばいいと思う。
それかAjaxか
751:nobodyさん
08/06/16 11:58:23
>>745
普通はユニットテスト用のロボット作るんじゃね?
使ってないけど、モジュールも何種類かあるはず。
752:nobodyさん
08/06/16 12:17:52
じゃあ、まずは画面を見て情報を処理しキーボード操作する
ロボットのAIの開発からしなきゃだな。
753:nobodyさん
08/06/16 12:26:02
>>752
そのAIのデバッグはどうするんですか。
754:nobodyさん
08/06/16 12:53:21
ニワトリが先か タマゴが先か
755:nobodyさん
08/06/16 23:32:06
真ん中をとってヒヨコが先だ
756:nobodyさん
08/06/17 00:45:20
>>745
CGI.pm を使うなら
use CGI qw(-debug);
757:nobodyさん
08/06/17 10:41:46
>>745
実際に色々な条件でPOST、GETさせてみて、
おかしくなったらそのつど、修正します。
あとは、スクリプトをWEB上にアップしている場合、
ユーザーの方からのバグ報告フォームを設けておくと、
問題発見が早くなります。
コマンドライン POSTで検索:
URLリンク(www.google.co.jp)
758:nobodyさん
08/06/17 12:33:48
>>757
500が帰ってきたとき、どこが悪いかどう見当つけてるかってはなしでしょ
759:nobodyさん
08/06/17 14:47:07
なんでTest関係のモジュール使わないの?マゾなの?
760:nobodyさん
08/06/17 16:37:40
世の中には君の環境と違う環境の人もいるのだよ
761:nobodyさん
08/06/17 18:26:54
> 世の中には君の環境と違う環境の人もいるのだよ
意地はってないで、「わかりません!教えてください!」っていうのがオトナだよ
762:nobodyさん
08/06/17 18:42:33
> 意地はってないで、「わかりません!教えてください!」っていうのがオトナだよ
意地はってないで、「詳しいことはわかりません!!」っていうのがオトナだよ
763:nobodyさん
08/06/17 18:53:23
URLリンク(www.google.co.jp)
764:nobodyさん
08/06/18 12:33:38
つまらん('A`)1
765:nobodyさん
08/06/18 14:54:32
Encode::guess_encoding の結果が shiftjis or euc-jp ってなったときで困ってます。
guess_encoding のあとに $utf8 = $enc->decode($inputkeyword); とやってるのですが、エラーとなります。
「 or 」 で split して
my $utf8 = Encode::decode($EncType[0], $inputkeyword);
のようにしたりするのが一般的なんでしょうか?
それとも Encode::decode する際に優先順位を決めたり出来て、それで decode できちゃったりするもんでしょうか?
766:nobodyさん
08/06/18 15:02:39
>>765
一般的かどうかは知らんが、俺は JEncode::_func_getcode() みたいな
ラッパーを書いて使っている。
URLリンク(www.donzoko.net)
767:nobodyさん
08/06/18 15:25:31
>>766
ありがとうございます。
_func_getcode と _ambiguous、_test_mojicode を見ながら実装します。
768:nobodyさん
08/06/20 01:13:32
@X0(a,b,c);
@X1(d,e,f);
と二つリストを作って、
$Y = int(rand(2));
で$Yに0か1を入れて、それに対応したリストを使いたいのですが、どうすればいいですか?
print "$X"$Y"[1]";
のような感じにしたいのですが…。
769:nobodyさん
08/06/20 01:41:21
print @{'X'.$Y};
770:nobodyさん
08/06/20 01:43:48
あ、スライスか
print @{'X'.$Y}[1];
771:nobodyさん
08/06/20 01:53:59
>>770
カッコイー
こんな風にしてた。
$Y = 'X'. int(rand(2));
print ${$Y}[1];
横からスマソ
772:768
08/06/20 02:20:58
>>769-771
素早い回答ありがとうございます。
773:nobodyさん
08/06/20 08:10:04
>>769-771
今時シンボリックリファレンスはやめとけ。
use strict;
my @X = [[a,b,c], [d,e,f]];
print $X[0]->[1]; # ==b ($X[0][1] とも書ける)
print $X[1]->[2]; # ==f
774:770
08/06/20 12:31:24
>>773
>>768に言ってくれ
前提条件に合わせてわかりやすく書いただけだ
775:768
08/06/21 17:41:30
昔やってたEBSってゲームを引っ張り出して弄ってる初心者なので、
バカの一つ覚え状態でかいてます><
>>773の書き方は始めてみました。
ありがとうございます。
776:nobodyさん
08/06/21 17:48:55
ここらへんにいる連中にへりくだる必要ないと思うよ。
777:nobodyさん
08/06/21 23:46:21
配列やハッシュでリファレンスを使うことを覚えると、かな~り違うよ。
778:nobodyさん
08/06/22 01:48:39
>>773
s[\[\[.*\]\]][([$1])]
779:778
08/06/22 01:49:38
s[\[\[(.*)\]\]][([$1])] # キャプチャし忘れたorz
780:nobodyさん
08/06/22 02:10:15
perlにjavaの.propertiesファイルみたいなのはないでしょうか?
ちょっとしたデータをファイルの中にまとめておければ便利だと思っているのですが、
そのような奴があれば、助かります。どなたかご教授ください。
781:nobodyさん
08/06/22 02:24:11
>>780
Data::Properties
782:nobodyさん
08/06/22 13:05:18
外部コマンドの出力結果の取り込みがうまくいきません、なぜなんでしょうか?
open(COM_RET, "ping -n 10 192.168.100.1 |");
while ($data_line = <COM_RET>) {
print $data_line;
};
close(COM_RET);
783:nobodyさん
08/06/22 13:27:13
なにも表示されないってこと?
pingコマンドは存在する?
openの後に$|=1;したら表示される?
for (`ping -n 10 192.168.100.1`){print;}ではどう?
784:782
08/06/22 13:28:07
すみません。
プログラムの保存先を間違えていました。
785:nobodyさん
08/06/25 22:01:59
Google Wireless Transcoder経由でアクセスされるとpostで送信されてくる
フォームのデータがおかしくなってたことありませんか?
たとえば、なにも入力しなかったinputフォームの値が全て文字列の"VALUE"に
なったり・・・
786:rubi
08/06/26 00:32:36 P35F8OvT
system関数で外部コマンドを実行する際、その引数にプログラム内で使用しているスカラ変数の内容を指定するのにはどうすればいいのでしょうか?
787:nobodyさん
08/06/26 00:55:50
system($cmd $arg1 $arg2 ・・・);
引数中にスペース等ある時は、
system qq($cmd "$arg1" "$arg2" ・・・);
788:nobodyさん
08/06/27 16:35:38
すみません知恵を貸してください。
こんなファイルがあります → 項目\tデータ\n
中には同じ項目でデータ違いがあります。
100\t百\n
100\t百円\n
100\t百円玉\n
同じ項目は一つで良いので一番データの短い100\t百\nを残して
残りの長い二行を削除したいと考えています。
何か良い方法は無いでしょうか。
短いデータのみ残したいので配列の重複削除サンプルは
そのままでは利用不可でした。
789:788
08/06/27 16:38:10
…と、そもそも重複ではないですね。
重複サンプル~以下は忘れてください。
790:nobodyさん
08/06/27 17:02:39
とりあえず書いてみろ
791:788
08/06/27 17:30:24
普段はスカラーと配列くらいしか使ってません。
項目もデータもバラバラなので方法が思いつかなくて。
792:nobodyさん
08/06/27 17:41:01
連想配列
793:788
08/06/27 17:59:26
初めは$DATA{項目} = データ; で一つだけ残そうと考えました。
そうじゃなくて、連想配列にしてデータサイズでソートとかあるんでしょうか?
分かりません(><)
794:nobodyさん
08/06/27 18:21:02
連想配列にしてデータサイズでソートすりゃいいだろ
795:nobodyさん
08/06/27 18:27:40
書かないってことはまだなにも書けない状態ってこと?
まずはopenでファイル開けるの解かる?
796:788
08/06/27 18:50:29
>>795
連想配列に入れてみました。
my %DATA;
open R, "koumoku.txt" or die;
while (<R>) {
chomp;
my ($key, $value) = split(/\t/);
$DATA{$key} = $value;
}
close R;
データサイズでソートは後でググってみます。
項目ごとに最短データだけ残す方法は今の時点で想像できません。。
797:nobodyさん
08/06/27 19:15:25
そこまで出来てるならあとは場合わけでしょ
if (exists $DATA{$key}){
length($DATA{$key}) > length($value) and $DATA{$key}= $value;
} else {
$DATA{$key}= $value;
}