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

【Perl】初心者コーナー Part19

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/02/09 00:24ID:s0tpWWxg
初めに→「perl」その物のスレです。

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

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


CGIだけど、なんか質問ある? Part 9
http://pc.2ch.net/test/read.cgi/php/1041530204/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/

あとは>>2-10。
0720nobodyさん03/03/09 16:26ID:???
>>719
Perlで実行速度や消費メモリを気にしすぎる方がどうかしていると思うが。
0721nobodyさん03/03/09 16:30ID:???
どんな言語でもコーディングで効率化は図れると思うが。
インタプリタやスクリプトなら最適化が難しい分余計に。

他の言語を使えというのはひとつのソリューションだろうが、
このスレの趣旨ではなかろう。
0722nobodyさん03/03/09 16:49ID:???
だから(ryってしてるんだと思うよ。多分。
0723nobodyさん03/03/09 17:04ID:???
>>714
深読みしすぎかもしれんが、

<<EOM;
EOM

この記法は「EOM」じゃないからね。
ソース出さずに「EOM云々〜」って質問すると恥かくから気をつけよう。
0724nobodyさん03/03/09 17:05ID:???
>>723
End Of M?
0725nobodyさん03/03/09 17:17ID:???
>鯖負荷を軽減させようとEOM使うのはやめたんですが
これどういう意味なんだ?
0726nobodyさん03/03/09 17:24ID:???
>>724
End Of Message かなあ。
>>725
ヒアドキュメントのほうが負荷が大きいと判断したのかと。
0727nobodyさん03/03/09 17:40ID:???
>>726
思いこみというやつ?
0728nobodyさん03/03/09 17:54ID:???
どっち使ったところで殆ど変わらんのじゃ?
0729nobodyさん03/03/09 18:06ID:???
>>695 = >>714 じゃないかな。
ヒアドキュメントのほうがオーバーヘッドが大きいのは確かだが。。。

>>728 に一票。
0730nobodyさん03/03/09 18:06ID:2bzPHLiw
便乗質問なんですが、HTML出力をprint文で書く時
print <<"HTML";
<html>
ほげほげ
</html>
HTML
と書いているのですが、どこかで「HTML」と書くのは"格好悪い"
と書かれていた気がします。。
慣例的にはなんと書けば良いのでしょう?
EOFとかになるんでしょうか?
0731nobodyさん03/03/09 18:12ID:???
>>730
print <<"NULLPO";
<html>
ぬるぽ
</html>
NULLPO
0732nobodyさん03/03/09 18:18ID:???
  ∧_∧
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/     
 (_フ彡        / ←>>731
0733nobodyさん03/03/09 18:19ID:???
>>730
別にいいんでないの?
asm{}みたいなもんだし。
0734nobodyさん03/03/09 18:26ID:2bzPHLiw
asm{}???
「HTML」格好悪くないですか??
できれば慣例とか知りたいです。
そういう慣例ページみたいのあればうれしいんですが。。
0735nobodyさん03/03/09 18:31ID:???
>>734
それは公開されている数々のスクリプトを見ればいいと思うけど。
0736nobodyさん03/03/09 18:41ID:???
慣習というか、一般的には結局終わりを示すわけで
END_OF_???
EO?
こんなのが多いと思うけどさ。

ラベルと一緒でそれとわかれば何でもいいんじゃないの?
0737nobodyさん03/03/09 19:27ID:vWAYxQig
>>735
ごもっともです。けど見てみたら同じHTML出力でも
統一されてないようだったのでいったい何の略だ?
と思いまして。。
>>736
なるほど。勉強になりました。EO?をよく見ると思ったら
そういう理由だったのですか。こういうのはEOM、こういう場合は
EOFとか暗黙の常識?みたいのがあると思ってました。
(ある程度はそういうのがあるのでしょうけど)
ありがとうございました。
0738nobodyさん03/03/09 20:20ID:???
print <<"おわり";
日本人なら日本語で。
おわり

# ネタだからね、多分!
0739nobodyさん03/03/10 00:09ID:???
慣習的にEOFをずっと使ってた……。
このスレ読むまで意味を考えたこともないことに気付いた。

HTMLはダサくないと思う。
むしろ、そこはHTMLの出力部分であることを明示する意味で、
ソースの可読性に貢献してると思う。

俺も少し考えてみるか……
074071403/03/10 01:07ID:???
実行共用サーバーを使っているので消費メモリは気にしたいんです
実行速度は確認画面などで時間稼ぎをすればある程度はごまかせますが
機械は誤魔化せないのが辛いです

ちなみに漏れはEOM=End of Messageだと思ってます
EOFは本来ファイルの終わりをさす言葉なので途中で書くことはためわれます

ヒアドキュメントを使うというのは@array=<FH>同様に一気にメモリーを使って実行してしまう書法
対してprint "abc"; print "cde";はwhile()同様にメモリーの消費を抑えて実行する書法だと思っているのですが
だと思っていましたが間違いでしょうか?
074171403/03/10 01:11ID:???
あ、意味不明なたとえにしてました
@array=<FH>;
print @array;
がメモリーの無駄遣い
print <FH> while(<FH>);
ということで、考えてみてください

ついでに695ではありません
0742nobodyさん03/03/10 02:21ID:???
別になんだっていいんじゃないの、自分の好きなので。<HTMLでもEOMでも
そんな些細な事にいちいちカコイイ!!とかカコワルイ!!とか言ってる方が何か変よ。
0743nobodyさん03/03/10 02:59ID:???
>>740
メモリの消費と言うが、ヒアドキュメント程度でperlがシステムから確保する
メモリを使い切るようなコードを書いてるならそっちが問題だろう。
特にサイズを指定しない場合のメモリサイズ知ってるか?

そうそう、答え

>間違いでしょうか?
間違いです。メモリに格納はされません。

>>741
考えるまでもない例えだろ。
074471403/03/10 04:24ID:???
>>743
メモリを確保しないでどうやって書き込むんですか?
0745nobodyさん03/03/10 04:51ID:???
>>744
リダイレクト
0746nobodyさん03/03/10 08:12ID:???
まぁ、結局View記述言語はPHPとかJSPな感じの記述法が最適な訳だが。
0747nobodyさん03/03/10 09:44ID:???
>>746
IIS+ActivePerl で PerlScript 使えばよろし
0748nobodyさん03/03/10 13:37ID:???
こんばんは。
PerlにはPHPのstaticに相当する関数ってありますか?
それなりにPerlを扱ってきたにもかかわらず、今まで知り得なかったので
もしあったら便利だなーと。
0749 ◆hMJAPH9PWA 03/03/10 14:08ID:???
>>748
perlfaqにあるね。staticキーワードは無いが、実現は出来る。
perldoc -q static
...
BEGIN { # BEGINが不要なケースもある。が、あったほうが安全
my $counter = 42;
sub prev_counter { return --$counter }
sub next_counter { return $counter++ }
}
...
0750nobodyさん03/03/10 14:21ID:???
>>748
13:37にこんばんわって日本に住んでないのか?(w
0751名無し.net03/03/10 19:23ID:???
こんばんは。
Perlで半角カタカナを文字化けさせないように利用するにはどうすれば良いでしょうか?
jcode.plを使うと文字化けが発生するのですが・・・。
全角カタカナに直す以外の方法で教えてください
0752nobodyさん03/03/10 19:27ID:???
>>751
無い。
0753名無し.net03/03/10 19:58ID:???
>> 752
そんなぁ〜(><)
0754nobodyさん03/03/10 20:30ID:???
>>751
全部SHIFT-JISで処理を行う
0755名無し.net03/03/10 21:03ID:???
Shift-JISならjcode.pl使っても文字化けしない?
0756T女の竹田03/03/10 21:22ID:???
>>755
Shift-JISで通すならjcode.plはいらない。
もちろんEUCでデータを送られたら化ける。

ところで、ページをSJISで表示してるのに、フォームからEUCで送られてくるってこと
あるのかな?前から疑問なんだけど。
0757名無し.net03/03/10 21:32ID:???
>> 756さん
出力はJhift-JISにしてますけど、コードやDBはEUCを使ってます。
あと、メールを使うときはjisに変換したり・・・。
なのでjcode.plをどうしても使ってしまいます。
0758nobodyさん03/03/11 09:23ID:???
100行くらいのテキストファイルがあったとして、
そのファイルの50行目の値が欲しい時、直接50行目の値を取得することできるんでしょうか。
49回スルーさせるんじゃなくて。
0759名無しさん@Meadow03/03/11 09:24ID:i+lsKHdV
>>757
Jcode.pmにしれ。
0760nobodyさん03/03/11 09:33ID:???
当然シフトJISで通したら正規表現は転ける。encodeプラグマ使えば別なんだろが。
そもそもネットで半角(ry
>758
固定長ならseekで。可変長なら無理ぽ
0761Fox03/03/11 10:58ID:eJEHBp/l
たしか、、半角カナは日本特有のコードだから化けるんじゃなかったカナ〜
0762nobodyさん03/03/11 11:02ID:???
>>761
漢字だって日本特有のコードですが。
0763nobodyさん03/03/11 11:33ID:???
>>756
ブラウザの実装次第になってしまうのでありうる。

>>757
EUCで半角カナをどう扱うか考えてみましょう。
無理ぽ

>>758
head -50 text.txt | tail -1
0764nobodyさん03/03/11 11:43ID:???
前にもここにかいたのですが、
掲示板にはいる前のページとかに
最後に書いた人の名前と時間が表示されてるのがつくりたいです。
ちなみにiモードでやりたいです。
0765nobodyさん03/03/11 11:44ID:???
>>764
だからどうぞ作ってくださいな。と。
0766nobodyさん03/03/11 12:05ID:???
>>764
ひとつ質問していい?

何でこのスレで聞くの?
0767nobodyさん03/03/11 13:09ID:???
>>757
なんで出力をEUC-JPにしないの?Shift JISにしないとなにか問題あるの?
0768nobodyさん03/03/11 13:47ID:???
>>765
>>766
すいません。間違えました。
0769の03/03/11 13:56ID:2/UrfMw3
>>760
インデックス持ってれば、可変長でも seek で可能だな。
0770nobodyさん03/03/11 14:06ID:???
ファイルポインタを末尾から数えて3行目に移動なんてできますか?
0771nobodyさん03/03/11 14:29ID:???
>>770
できません
0772nobodyさん03/03/11 15:32ID:???
>>770
seekでファイルサイズ-3すれば?
0773nobodyさん03/03/11 15:37ID:???
>>772
わけわからん。
0774nobodyさん03/03/11 15:45ID:???
>>773
わかるよ。3行目と3文字目を間違えてるんだろ、要するに。
0775nobodyさん03/03/11 15:46ID:???
>>774
>3文字目

間違ってるぞ。
0776nobodyさん03/03/11 15:47ID:???

exitってさ、ライブラリから使ってもOKだよね?
完全にプロセス死んでくれるよね?
まさかライブラリのみ終了してますた。なんてオチはないよね?

内部処理とかはどーなってるのか全然知らないんで…。
m(__)m
0777nobodyさん03/03/11 15:51ID:???
>>776
もちろん大丈夫
077877603/03/11 15:56ID:???
どーもありがとうでした。
0779nobodyさん03/03/11 15:59ID:???
>>770
ファイル内部に行なんていう概念はない。
\n毎に行と考えたいのだろうが、ファイルにとってはただの1文字。

どうしてもやるなら読み込んでから改行の数と位置を調べて
計算して3行目に相当する位置へseek。
0780nobodyさん03/03/11 16:48ID:4+uSO65s
ルーチンaaaで使う変数は全てレキシカル変数(my)とする。
って言う便利な記述はないですか?

ないですよね?
078177003/03/11 16:56ID:???
上手い方法はないのですね。ありがとうございました。
0782nobodyさん03/03/11 17:47ID:???
>>780
ダサい構造化言語だな。
0783nobodyさん03/03/11 18:05ID:???
>>780
php使え
0784nobodyさん03/03/11 19:16ID:8fW/w1hx
ウェブメールのパスワード(半角数字4文字)が分からなくなってしまい、
数字を1万通り入れればいいんですけど、さすがに時間の都合で難しい
登録した時のアドレスが違うのかパスワード再発行が処理されない。

以上の状態

他の板で
テキストエリアに入力するよりPerlでも使ってガーっとpostし
たほうが簡単。

といわれましたが、perlは使った事がないんで何とも。
その板の住人に聞くのも板違いかと思って、こちらに移りました。

自分で検索した所、イメージ的に

1,自分のPCをperlが使えるようにする。(できた)
2,perlにてパスワードのエリアにpostするためのファイルを作成
3,自分のPCから実行し、パスワードテキストエリアに挿入

という事で、だいたい合ってますか?
0785nobodyさん03/03/11 19:18ID:???
>>784
犯罪に結びつく可能性があるので教えない。

同情誘っても無駄。お帰り下さい。
0786nobodyさん03/03/11 19:21ID:???
>>785
一応、同情を誘うつもりはありません。
質問スレなので、詳しく書こうかと思って。

その辺伏せれば、まともな答えが返ってこないですよね?
0787nobodyさん03/03/11 19:26ID:???
>>786
書いたところで帰ってこないと思うよ。総当たりのパスワードクラッキングの方法なんて。
0788nobodyさん03/03/11 19:29ID:???
>>787
お説教でしょうか?

まあ、だいたい合っているというのであれば、それはそれで
いいです。

後は自己責任でやります。
どうもありがとうございました。
0789nobodyさん03/03/11 19:30ID:???
>>788
>まあ、だいたい合っているというのであれば

すまん、上2行くらいしか読んでない。
0790nobodyさん03/03/11 19:30ID:???
Brute Force Attackというやつだね。
0791nobodyさん03/03/11 19:35ID:???
>>789
どうせわかんないんですよね。
0792nobodyさん03/03/11 19:40ID:???
>>791
既にフローチャートじみた物は頭にあるがその使い古された挑発には乗る気にならない。
0793nobodyさん03/03/11 19:41ID:???
パスワードが通ったか通らなかったかの判断分岐が
ちょっと面倒そうだなあと言ってみるテスト。
0794nobodyさん03/03/11 19:42ID:???
>>793
ダメだったときの結果はわかるのだからそのelseで良いんではないかと考えた。

と、誘導尋問ならおもしろいなと思ったテスト。
0795nobodyさん03/03/11 19:44ID:???
>>792
質問に関しては解決したと見ていいです。
挑発してません。
0796nobodyさん03/03/11 19:46ID:???
>>795
冷静かつ必死ですね。
0797nobodyさん03/03/11 19:47ID:???
スクリプト荒らしですか?
0798nobodyさん03/03/11 19:50ID:???
>>796
必至でした
が正解です。
0799nobodyさん03/03/11 19:50ID:???
>>784
perlでpostが1〜3にないんだが、
フォームには手でコピペするのかなあ?
0800nobodyさん03/03/11 19:52ID:???
>>799
やめとけ。
0801nobodyさん03/03/11 20:12ID:???
(σ´∀`)σゲッツ!?
0802nobodyさん03/03/11 20:26ID:???
最近放置できない熱いハートの持ち主が多いなぁ・・・
0803nobodyさん03/03/11 21:12ID:???
逆に自作自演かも。(笑

その前に釣られたあなたもはーとびーと
0804nobodyさん03/03/11 22:51ID:???
私はまるでCGIのことがわからんのですが、
多人数同時参加型のネットゲームが作りたいです。
 どうすればよかとですか?
0805nobodyさん03/03/11 22:54ID:???
>>804
取りあえず基礎を勉強してくれ。

レーサー志望にアクセルの踏み方から教えていたら日が暮れる。
0806nobodyさん03/03/12 13:12ID:???
変な質問なんですが・・・
perl本体とlib(*.pm)のそれぞれをBuildするコンパイラが違ったりすると
マズい事になりますか?

具体的にはSolaris。perlがSUNのccでBuildされ、lib類(CPAN等)はgcc
でBuildされた場合・・・って感じです。
Shared library 周りで不整合が起きる様な気もするんですが、手元にSUNの
ccが無いので試す事が出来ません。
0807nobodyさん03/03/12 13:15ID:???
>>806
どっちもありえる
0808nobodyさん03/03/12 13:55ID:???
ActivePerl-5.8.0.805-MSWin32-x86.msi をインストールし、さらにImage::Magickを
インストールしようと思ったのですが、ppm で検索をかけても見付かりません。

http://ppm.activestate.com/PPMPackages/zips/
で 8xxを見たら確かに無いので 6xxにある Image::Magick.zip を使って
ppm install Image-Magick.ppd
したのですが以下のようなエラーが出てきてしまいます。
Error: no suitable installation target found for package Image-Magick.

これはどのように対処したらいいのでしょうか。
0809nobodyさん03/03/12 14:13ID:???
>>808
ActivePerl-5.6.1.635 を使って下さい
0810nobodyさん03/03/12 15:54ID:eDO5fFOY
$n の値が $i の倍数だったら真。
という正規表現を書こうとしたんですが
どうも書き方が解らず for 文になってしまいます。

どなたかお手本を見せてもらえないでしょうか。
お願いします。
0811nobodyさん03/03/12 15:57ID:NGPUyx9R
>>810
数値だよね?
($n % $i == 0)
081281003/03/12 16:16ID:???
>>811
数値です。
なるほど、割り切れるかどうかを見ればよかったんですか。
有難う御座いました。

頭悪くてスミマセンです。
0813nobodyさん03/03/12 17:56ID:bplOKqH9
ぐちゃぐちゃと書き込んだコメントをすべて取ってしまおうと
思い立ち、エイヤっと全部まるまる取ってしまったら、なんか
すごくスクリプトがスッキリ見えて、前よりも理解しやすくなっ
た。。。。という経験ないすか?
0814nobodyさん03/03/12 18:05ID:???
>>813
俺のプログラムのコメントを書く人は寡黙な方なので数日後に開いてパニックになったりします。
0815nobodyさん03/03/12 21:54ID:???
現在自動メール返信のルーチンを考えています。
スクリプト内で取得したメールアドレスを$mailという変数に
格納し、メールのテンプレートを外部ファイルから読み込んで
送信したいのですが、ヘッダ部分にTo: "$mail"と記述していても
変数展開が行われません。
外部ファイル内にある変数は展開できないのでしょうか?
0816nobodyさん03/03/12 22:03ID:???
>>815
evalれ。
0817nobodyさん03/03/12 22:11ID:???
>>815
$mailがどんな形で宣言されているのか不明なんで、わかりません。
081881503/03/12 22:32ID:???
>>817
メインルーチンの中で、$mail="[email protected]";
となっています。で、外部ファイルでは
To: $mail
From: [email protected]
Subject: hoge
<以下メール本文>

という構造です。このテンプレートファイル名が$fileに格納されているとき、
open (BODY,"$file");
@mail_body=<BODY>;
close (BODY);
としています。
0819nobodyさん03/03/12 22:44ID:???
>>818
@mail_body =~ s/\$mail/$mail/gs;
0820nobodyさん03/03/12 23:09ID:???
@mail_body = map{ s/\$mail/$mail/g; $_; } <BODY>;
s///はスカラのみが対象になるかと。

スマートにやるなら、HTML::Templateをお勧め。
■ このスレッドは過去ログ倉庫に格納されています