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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/05/30(水) 11:34:01ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >>2-10

前スレ http://pc11.2ch.net/test/read.cgi/php/1171102883/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0133nobodyさん2007/06/16(土) 05:46:41ID:???
え?
こんな高い位置にブロック書くの?
ちょっと書いてみて。

sub error
{
    my($str) = @_;
    print $str;
    exit;
}
sub main
{
    open(FILE, "< uso.txt") or &error("そんなファイルないよ");
    my @lines = <FILE>;
    close(FILE);
    $#lines < 0 and &error("中身ないよ");
    # 以下略
}

はースッキリ快適。
0134nobodyさん2007/06/16(土) 09:51:02ID:???
>>133
「 can か cannot」かって聞かれて(と判断して) can と答えたんじゃね?
実際やるか とは別でしょ。
01351322007/06/16(土) 12:14:24ID:???
>>133
>>131
> or のあとにブロック書ける?
を質問と捕らえて回答したまで。
0136nobodyさん2007/06/16(土) 12:43:25ID:???
2引数openとか古臭い書き方だなあ
0137nobodyさん2007/06/16(土) 13:49:35ID:???
批判はするが例を示さない
この板らしいっちゃらしいな
0138nobodyさん2007/06/16(土) 17:06:40ID:???
示すまでもなくperldocに書いてあります
0139nobodyさん2007/06/16(土) 17:39:20ID:???
今後当スレはPerlDocに統合します。
長らくの御愛顧ありがとうございました。
ttp://www.ayni.com/perldoc/

--完--
0140nobodyさん2007/06/16(土) 17:51:06ID:???
確かにこの低レベルなスレはperldocと統合しても何ら差支えはないだろう
あ、ム板の方は高レベルなので残して置いて下さいね^^
0141nobodyさん2007/06/16(土) 17:53:36ID:???
ム板ならともかくこっちなら2引数で正解だな。
どこにでも5.6以上のPerlが置いてあるなんて考えるのは甘い。
0142nobodyさん2007/06/16(土) 18:25:16ID:???
顔赤すぎ
0143nobodyさん2007/06/16(土) 18:25:26ID:???
まあ現代の大抵のレン鯖は5.8なのが事実ですけどね
0144nobodyさん2007/06/16(土) 18:36:36ID:???
ム板って何?
前スレの終わり辺りから何かあると盛んに出てくるけど
0145nobodyさん2007/06/16(土) 18:50:25ID:???
OS再インストールしたら自己解決しました。
ttp://pc11.2ch.net/test/read.cgi/tech/1173880452/
2chか。レベル高いってネタだよね?

105 デフォルトの名無しさん [sage] Date:2007/03/22(木) 22:45:19  ID: Be:
    HTTP 500 - 内部サーバー エラー です
106 デフォルトの名無しさん [sage] Date:2007/03/22(木) 22:48:42  ID: Be:
    なんでブラウザにエラーが出るわけ?

いやApacheの設定なんですけどね…
前スレの終わりでuse Benchmark;使ったら全員で猿のようにベンチマーク。
未だに。2chばかり見てるとますますバカになるよ。
0146nobodyさん2007/06/16(土) 20:33:02ID:???
>>141
粘着君の相手するなよ。
0147nobodyさん2007/06/16(土) 21:07:50ID:???
>>141
FileHandleやIO::Fileモジュールを使おうよ。
0148nobodyさん2007/06/16(土) 21:08:54ID:???
だって遅いしー
0149nobodyさん2007/06/17(日) 00:01:52ID:???
PerlモジュールのEmbed::Persistentはどこにありますか?
Win (no cygwin) + lighttpd + FastCGIでPerl 5.8を動かしたいのですが、ppmで引っかかりませんでした
0150nobodyさん2007/06/17(日) 10:35:59ID:???
普通にいつものページで検索すればありましたが

Win32 PPM packages for "ExtUtils-Embed"
trouchelle.com Perl 5.8 repository [ v 1.14 ]
0151nobodyさん2007/06/18(月) 00:25:21ID:k4WptDOc
メールで送信した内容をCGIで処理するには、
どうしたらよいでしょうか?
MovableTypeやWordPressのメール投稿のようなイメージです。
mail@hoge.comに送信して、www.hoge.comのCGIで
その投稿内容を読むといった感じです。

PerlでPOPクライアントを書いて、内容を取得して、
それをcronで回すくらいしか思いつかないのですが、
cronを回せるレンタルサーバも少ないですし、
回せても1時間毎くらいがせいぜいだったりしますし。
0152nobodyさん2007/06/18(月) 00:46:35ID:???
ログイン時に受信すればいい
0153nobodyさん2007/06/18(月) 05:55:05ID:???
151 さんは、メールを送った直後に自動更新されることを期待していると思うんだ。
152 みたいなバカは死ぬとよい。
0154nobodyさん2007/06/18(月) 06:31:20ID:???
>>151 = >>153
バカな153のせいで、151の質問に答える奴はいなくなりましたとさ(終)
0155nobodyさん2007/06/18(月) 06:32:06ID:???
>>152 == >>154 ?
0156nobodyさん2007/06/18(月) 06:45:55ID:???
ここまで俺の
01571542007/06/18(月) 07:36:43ID:???
>>155
まぁ、そうくるだろうと思ったよ。マジレスすると152は漏れじゃない。
信じなくても良いけど、>>153を援護すればする程、>>151の質問に
答える奴はいなくなるよ?(w
0158nobodyさん2007/06/18(月) 07:57:34ID:???
ここまで俺の
0159nobodyさん2007/06/18(月) 08:46:27ID:???
神経戦乙
0160nobodyさん2007/06/18(月) 09:05:53ID:???
> 答える奴はいなくなるよ?(w

答える能力はないが煽っていますということ?
0161nobodyさん2007/06/18(月) 09:30:18ID:???
qmailならhomeディレクトリにメール受信時にスクリプトを動作させることはできるが、
他のメールサーバーでも同じことはできるかと思う
0162nobodyさん2007/06/18(月) 13:27:43ID:???
答える答えない以前に、Perlの質問じゃないから。
0163nobodyさん2007/06/18(月) 13:29:32ID:???
> 答える答えない以前に、Perlの質問じゃないから。

それがどうしたの?
0164nobodyさん2007/06/18(月) 13:59:19ID:???

それがどうしたの、と言われましても…
ここはPerl"コーディング"質問スレな訳ですし。
ロジック的なことを聞きたいのならば、
この板にも適切なスレッドがありますし、
更に深い内容ならUNIX板とかに行けば良いでしょう。
しかし、そのロジックを理解した上でのコーディングに関する
質問はスレ違いではありませんが、レベル的に
"自分で考えれば分かる"程度なので、処理をアシストする
モジュールくらいしか案内出来ないでしょう。
少なくとも 151 の書き込みを読む限りでは。
0165nobodyさん2007/06/18(月) 14:18:33ID:???
>>153>>152 を煽る理由がわからん
152 が質問者なのか
違うのなら質問に答えると思うが
0166nobodyさん2007/06/18(月) 14:47:39ID:???
上島竜平は まで読んだ。
0167542007/06/18(月) 15:51:47ID:???
>>152-155まで皆氏ねば済む話じゃないか
0168nobodyさん2007/06/18(月) 15:52:52ID:???
名前欄誤爆った…54ってorz
0169nobodyさん2007/06/18(月) 16:14:07ID:???
情けない質問するやつも氏ねば済むんじゃね?
0170nobodyさん2007/06/18(月) 16:21:21ID:???
メール着信でスクリプトをキックする方法は、管理者に訊いた方がいい。
システム構成によって方法が違うから。
禁止されてるかも知れないし、maildropが使われてるかも知れない。

ここからPerlコーディングについての質問。
0171nobodyさん2007/06/18(月) 18:46:23ID:???
もうバレバレじゃん(w
>>153を援護する奴が>>151(質問者)だろ?
大体、質問した奴がこの流れで16時間も静観してる訳無いだろ?
しかも口調が一緒だし(w

>>151 = >>153 = >>155 = >>160 = >>163

質問に答えてもらおうと必死。
0172nobodyさん2007/06/18(月) 19:28:33ID:???
>>171
スレ違い
0173nobodyさん2007/06/18(月) 19:32:33ID:???
+= >>172
0174nobodyさん2007/06/18(月) 19:39:27ID:???
my $intAnchor = 1;

while( $intAnchor < 1001 ) {
>>172 += $intAnchor;
$intAnchor++;
}
0175nobodyさん2007/06/18(月) 19:57:19ID:???
0176nobodyさん2007/06/18(月) 20:07:15ID:???
いや>>151 = >>153 = >>155 = >>160 = >>163も十分見苦しいけど、
>>152 = >>154 = >>157 = >>165 = >>171もなんか必死すぎて嫌いだ
お前ら皆どっかいっちゃえ!!!11
0177nobodyさん2007/06/18(月) 21:04:16ID:???
>>151
CGIで読むってことは、CGIがメーラー(POPクライアント)の役割をするわけだから、
CGI起動時にメールボックスから届いたメールを読み出せばいいのでは。
Net::POP3でも使ったらどうですか? 読み出したらサーバから削除するなどの
処理はすべて自分で書く必要があります。GUIのないメーラーを作るようなもんです。
…ていうことではなくて、届いたタイミングで、届いたメールデータを処理したい
ってことかしら。であれば、perlというよりは、.forwardまたはdot-qmailファイル
にでもプログラムにパイプで渡す設定をしておけば、プログラムから標準入力
を読んで処理すれば済む。MIME::Parserを使うと便利。
まずはコードを書いてみることです。
0178nobodyさん2007/06/18(月) 21:31:22ID:???
素朴な疑問。
CGIで、場合によってLocationヘッダを返した場合、
ユーザからみると、即座にページを飛ばされるんですが、
そのCGIはLocationヘッダを返したあともexitしない限り、
以後の処理をし続けるんでしょうか。
0179nobodyさん2007/06/18(月) 21:41:57ID:???
#!/usr/bin/perl

use strict;
print "Location: http://www.yahoo.co.jp/\n\n";
sleep(10);
exit;
0180nobodyさん2007/06/18(月) 21:45:01ID:???
どうも。確かめる方法がわかりました。つまらん質問すみません。
飛ばした後にファイル出力できたので、ちゃんと最後まで処理しますね。
てことは飛ばした場合もちゃんとexitしたほうが無駄が少ないということ
ですよね??
0181nobodyさん2007/06/18(月) 21:57:32ID:???
きみの言う無駄とは?
0182nobodyさん2007/06/18(月) 22:27:24ID:???
ああ、そういう突っ込みになりますよね。無駄があるのは僕だけの事情でした。
例えば、通常、ウェブページをきちんと出力するルーチンの途中で例外的に
飛ばした場合の、その後のページ出力処理、とか。
0183nobodyさん2007/06/18(月) 23:07:27ID:???
179さんの言ってる意味がいま解りました。最後まで処理しないと
飛ばないんですね。面目ない。
0184nobodyさん2007/06/18(月) 23:15:58ID:???
そりゃ単にバッファをフラッシュしてないだけだろ
01851512007/06/18(月) 23:52:23ID:k4WptDOc
質問の仕方等々で至らぬ点があり、なんだか揉めてしまったようで申し訳ないです。
普通に帰るのが遅い人間&出先から書きにくい状態でした。

意図としては>>177さんが書いてくださったような、
「届いたタイミングで、届いたメールデータを処理したい」、
つまり、メールを受けたことをトリガとしてバックエンドの処理を動かすという
というものでした。
例えば、メールで「1+1」と送ると、バックエンドで計算処理をして、
答えを「2」で返す、というような。

ご指摘いただいたように、Perlコーディングという内容ではないので、
いただいたお答えを元に、うちの環境で確かめることにしてみます。

ほんとうにありがとうございました。
0186nobodyさん2007/06/20(水) 13:54:26ID:???
改行を含む文字列の中の一部分を取りたいときに、直近の改行コードまでという指定は出来ないものでしょうか?

kani
kanimiso@
kanikama

上のような文字列(@部分がいろいろ変わる)からmiso@を抜き出したいんだけど

s/.*kani(.*)\n/$1/;

みたいにするとmiso@\nkanikama\nまでが取れてしまいます。
0187nobodyさん2007/06/20(水) 14:25:25ID:???
最短マッチとかs修飾子とか
0188nobodyさん2007/06/20(水) 14:53:02ID:???
最短マッチで出来ました。ありがとうございました。
0189nobodyさん2007/06/20(水) 18:37:42ID:???
中身が空っぽもしくは
<html>
<head></head>
<body>
</body>
</html>
になってるファイルに<p>hogehoge</p>を書き込んで
<html>
<head></head>
<body>
<p>hogehoge</p>
</body>
</html>
にしたいのですがどうしたらよいでしょうか。
0190nobodyさん2007/06/20(水) 18:40:27ID:???
>>1
0191nobodyさん2007/06/20(水) 18:40:41ID:???
質問ってレベルじゃねえぞ…
0192nobodyさん2007/06/20(水) 18:40:54ID:???
>>189
それだけの条件なら何も考えずに最終結果を固定で上書きするだけでいいんじゃねーの?
0193nobodyさん2007/06/20(水) 18:43:32ID:???
すみません>>189に追加させてください

<body>〜</body>に<p>hogehoge</p>以外に既に何か文字が入っていても
それを消さずにその下に追記するようにしたいのです。
<body>
<p>fugafuga</p>
</body>

<body>
<p>fugafuga</p>
<p>hogehoge</p>
</body>
こんな感じです
0194nobodyさん2007/06/20(水) 19:04:32ID:???
HTML::Templateでも使っとけよ・・・
0195nobodyさん2007/06/20(水) 20:24:57ID:???
open(FILE,"<index.html");
my $html = <FILE>;
close(FILE);
$html =~ /<\/body>/;
my $top = $`;
my $bottom = $';

$top .= "<p>追加する文字列</p>\n";
$top .= $bottom;

open(FILE,">index.html");
print <FILE> $top;
close(FILE);

exit;

This is not confident.
Please point it out when the mistake is found.
0196nobodyさん2007/06/20(水) 21:07:55ID:???
perl -MIO::All -e '($tmp = ${io("index.html")}) =~ s{(</body>)}{<p>hogehoge</p>$1}, $tmp > io("index.html")';
0197nobodyさん2007/06/20(水) 21:32:55ID:???
perl -0777 -i.bak -pe 's{(</body>)}{<p>hogehoge</p>\n$1}' index.html
0198nobodyさん2007/06/20(水) 22:14:26ID:???
>>189です。みなさんありがとうございます。
ご飯食べてお風呂入ってるあいだ自分でもこんなの思いついたんですけど
>>195さんのとかのほうがスマートでしたね

if (-e $xmlfile && -s $xmlfile) {

open (FILE, "<test.htm") or die "$!";
@file = <FILE>;
close (FILE);

foreach $line (@file){
if($line =~ /<\/body>/){
$line =~ s/$追加する文字列\n$&/;
}
}

open (FILE,">test.htm");
print FILE @file;
close(FILE);

} else {

open (FILE, ">test.htm") or die "$!";
print FILE "<html>\n<head>\n</head>\n<body>\n$追加する文字列</body>\n</html>\n";
close (FILE);

}

0199nobodyさん2007/06/20(水) 22:45:40ID:???
/<\/body>/ こんな書き方する馬鹿は氏ねばいいのに!
0200nobodyさん2007/06/20(水) 23:06:37ID:???
>>199
だめなの?
0201nobodyさん2007/06/20(水) 23:09:39ID:???
>>199
そこまでは思わんが、実行するまでもなくグダグダな195に
195を実行せずにレスする質問者を見るとなあ。
0202nobodyさん2007/06/21(木) 00:03:24ID:???
>200
if ($line =~ m{</body>})
こんな感じにしたほうが読みやすいだろ、ってこと
0203nobodyさん2007/06/21(木) 00:04:59ID:???
いや
別にいいだろwww
0204nobodyさん2007/06/21(木) 00:15:52ID:???
それだけで氏ねとか言われたならなんだかちょっぴりかわいそすwww
0205nobodyさん2007/06/21(木) 00:35:30ID:???
基本だろ。大丈夫か?
ってまた彼が言ってるだけか。
0206nobodyさん2007/06/21(木) 01:03:59ID:???
>>189へのレスのシカトっぷりと、結局自分で書けた(=質問する意味ね
えじゃん)って事と、>>195のふざけた態度みて(なにが添削しろだよ、
せめてsyntax errorなくしてからレスれ)寛大で居られるおまえらは凄い。

氏ねとは思わんが消えろとは思うぞ、心の底から。
0207nobodyさん2007/06/21(木) 01:06:53ID:???
Template
0208nobodyさん2007/06/21(木) 01:09:30ID:???
>>206のキレっぷりも凄いがなw
>>195の最後の2行は「これ自信無い。間違ってたら指摘して」って事じゃねぇの?
0209nobodyさん2007/06/21(木) 01:15:30ID:???
>>189は釣りだったってことで
0210nobodyさん2007/06/21(木) 01:17:03ID:???
>>195は回答者としては初心者(良回答とは言えない)だろうが、
一応>>193の答えにはなってるからいいんじゃないのか?
自分で書けた〜のくだりは同感だが、そんなのにいちいち目くじら立ててもな。
ついでに言うと、>>206は海外に行かない方が良さそうだな。
0211nobodyさん2007/06/21(木) 01:20:11ID:???
>>210
syntax error出るのが答えなの?
要件にも沿ってないよ。実行してみ?
0212nobodyさん2007/06/21(木) 01:25:23ID:???
>>208
正確な和訳は出来てたが、つい勢いで。
>>210
どっちかってーと質問者よりも195の方が消えて欲しい。
一回くらいは実行してから、レスするのが礼儀じゃないか?
特に自信ないならなおさら。

最後の一行は同意。
0213nobodyさん2007/06/21(木) 01:27:55ID:???
>>208
そう書いたつもりなんだろうけど「俺じゃなくてこのコードさんが、自信がない、と」に
なってたりでいろいろアレなことになってる。

>>206
俺は寛大じゃないけどめんどくさいので>>195はほったらかしてた。

>>210
辞書で confident 引いて用例眺めろ、ってあんたに言えば>>195に伝わりそうな気がする。
0214nobodyさん2007/06/21(木) 01:53:11ID:???
質問者が自己解決するまでに
ろくな回答もできない低脳どもの集まるスレはここですか?
0215nobodyさん2007/06/21(木) 10:11:00ID:???
違う。
お前が一人で荒らしてるスレ。
0216nobodyさん2007/06/21(木) 10:22:50ID:???
これだからPerlはwww
tp://0-9.sblo.jp/article/4439458.html
0217nobodyさん2007/06/21(木) 10:28:38ID:???
>>194
0218nobodyさん2007/06/21(木) 13:21:32ID:???
"1,21,10,100,1"のようにランダムに数字が入った文字列の中で
「1」という要素が含まれているかどうかを知りたいのですが、
splitで配列化してハッシュに入れる方法以外には無いでしょうか?

最短マッチで

$data = '1,21,10,100,1';
if ($word =~ /(1?,)/) { print "存在します¥n"; }

とやったら最後にある「1」がチェックできませんでした。
0219nobodyさん2007/06/21(木) 13:47:27ID:???
色々勘違いしてそうだから「最短マッチ」でググるといいよ
それと$dataと$wordのtypo
0220nobodyさん2007/06/21(木) 13:53:22ID:???
おまえら魚でも食って落ち着けよ
0221nobodyさん2007/06/21(木) 14:35:54ID:???
if (grep { $_ eq '1' } split(/\,/, $data)) { print "存在します\n"; }
0222nobodyさん2007/06/21(木) 14:51:26ID:???
/1(,$)/じゃダメ?
02232182007/06/21(木) 14:57:47ID:???
>>219
ググって勉強し直しました。typo_| ̄|○
文字列なのだからわざわざ分割せずに正規表現を使って調べる方法は無いかと
思ったのですが、素直に分割した方が早そうですね。
221さんもありがとうございました。
0224nobodyさん2007/06/21(木) 16:08:32ID:???
if($data =~ m/1/g){print"存在します\n"}
0225nobodyさん2007/06/21(木) 16:14:09ID:???
/\b1\b/
0226nobodyさん2007/06/21(木) 16:22:39ID:???
print "存在します\n" while($data =~ m/\b1\b/g);
0227nobodyさん2007/06/21(木) 16:28:11ID:???
if($data =~ /^1,|,1,|,1$/){ print "true \n"; }
0228nobodyさん2007/06/21(木) 16:52:54ID:???
>>216
>CGI.pmをラップしてMyCGI.pmを作った。
>CGI::Varsを上書きして定義し、最後に「return $this->SUPER::Vars()」とかした。
>帰ってきたのはhashに見える別物。参照を突っ込むと「'ARRAY(nnnn)'」って文字列で保存しやがる。
>保存できねぇなら半端にやらずにいっそ死んでくれ。。。

ってどういうこと?
0229nobodyさん2007/06/21(木) 17:06:27ID:???
質問です。
CGIの処理で、別のCGIを呼び出すにはどうしたらいいのでしょうか?
例えばセッションを確認して、有効じゃなかったので、ログインページを表示するCGIに
飛ばす場合などです。
現状ではレスポンスヘッダーのlocationに、呼び出したいCGIのパスを指定して渡していますが、
そうするとサーバはperlの起動を2回してることになって負荷的にスマートじゃない気がします。
何か定番のやり方があれば教えてください。
0230nobodyさん2007/06/21(木) 17:22:50ID:???
>>229
俺はlocationにしてるな。
locationをブラウザに渡してからリクエストを受けるから2回起動してるわけじゃないぞ。
0231nobodyさん2007/06/21(木) 17:33:17ID:???
うちもlocationだなー。
で、飛ばす先(CGI)へのパラメータとして、元のページのURLを渡す。
0232nobodyさん2007/06/21(木) 17:40:38ID:???
>>228
「ぼくは頭が悪すぎるから死にたい」ってことじゃね?
0233nobodyさん2007/06/21(木) 17:41:43ID:???
>>228
ログインページ表示を切り出しておいて呼び出すとか。
■ このスレッドは過去ログ倉庫に格納されています