Perlコーディング初心者質問スレ Part 44
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/10/17(月) 00:47:17ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0693nobodyさん
2005/11/26(土) 12:00:07ID:???Outlook を使ってない人、プレビューしたく無い人もいるわけだけど、
そういう人の手間が増えたり、ウザいと感じるのはいいわけ?
0695ゆーき
2005/11/26(土) 12:29:09ID:yGTXOsFB今回は、1人のクライアント専用に作っていまして、こちらの要望なんです。
0696ゆーき
2005/11/26(土) 12:49:51ID:yGTXOsFBprint "Location: mailto:aaa\@aaa.com?subject=件名\&body=1行目\%0D\%0A2行目\n\n";
としてみましたが、だめでした。
0697nobodyさん
2005/11/26(土) 13:18:09ID:???<meta http-equiv="refresh" content="0; url=mailto:[email protected]?subject=件名&body=1行目%0d%0a21行目">
</head>
HTMLタグで飛ばしてやるのはだめなの?
0698nobodyさん
2005/11/26(土) 13:49:44ID:???0699ゆーき
2005/11/26(土) 13:51:51ID:yGTXOsFB完璧です!!!(^^)!
上手くいきました!ありがとうございましたm(_ _)m。
とても丁寧にアドバイス頂きまして、本当にありがとうございました。
おかげさまでクライアントにも顔がたちます。感謝!感謝!感謝!感謝!感謝!
0700289
2005/11/26(土) 14:52:54ID:EqqUKm3R連想配列をファイルやDBのカラムに保存したいのですが、
可能でしょうか?
可能であれば方法をご教授お願いいたします。
0701nobodyさん
2005/11/26(土) 15:26:01ID:???もちろん可能だけどどのあたりがわからないの?
連想配列にどんなキーがあるのか知る方法がわからないとか→keys, each
ファイルへの記録方法がわからないとか→open, print, close
PerlからDBを使う方法がわからないとか→http://search.cpan.org/modlist/Database_Interfaces
それを連想配列に戻す方法がわからないとか→それぞれのキーに対して値を代入
0702nobodyさん
2005/11/26(土) 15:35:34ID:???0703nobodyさん
2005/11/26(土) 16:18:41ID:???ハッシュをそのままDBのテーブルにマッピングしたいってこと?
0704nobodyさん
2005/11/26(土) 16:33:28ID:???それならStorableだよな
0705700
2005/11/26(土) 17:02:03ID:EqqUKm3R>>704
そういう事です。説明足りなくてすいません。
普通に連想配列をファイルやカラムにinsertしても
読み取りにに失敗したので(当然)。
Storableとはなんでしょうか?ググってみます。
0706nobodyさん
2005/11/26(土) 20:35:13ID:zmLMleB62chのSETTING.TXTみたいなのです。
2chってどうやってるんだろう・・・。
0707nobodyさん
2005/11/26(土) 20:38:46ID:???と言うか物凄く初歩です
0708nobodyさん
2005/11/26(土) 20:42:51ID:???こんな感じで・・・
open IMAGE, "<:raw", "img.gif";
print "Content-type: image/gif\n\n";
print <IMAGE>;
close IMAGE;
しかしこれを実際にテストしてみると、ブラウザには
画像がシュレッダかけられたみたいなへんてこりんな
画像で、しかも縦の長さが押しつぶされてしまった
感じの画像が表示されます。要は、正しく表示されません。
jpeg画像にしてやってみると、今度はバッテンのアイコンが
でてしまいます。
なぜうまく表示できないのでしょうか?
0709nobodyさん
2005/11/26(土) 20:49:30ID:???0710nobodyさん
2005/11/26(土) 20:51:22ID:???:rawだから違うんじゃね?
0711710
2005/11/26(土) 20:52:06ID:???STDOUTに対してbinmodeか
0713708
2005/11/26(土) 21:19:39ID:???一応raw指定でbinmodeのつもりです。
あと自鯖でやってます。Apache2です。
0714708
2005/11/26(土) 21:29:15ID:???逆にIMAGEに対してはbinmodeにしなくてもいいようですね。
ありがとうございました。
0716nobodyさん
2005/11/26(土) 21:37:16ID:zmLMleB6そんじゃおしえてください
0717nobodyさん
2005/11/26(土) 21:41:42ID:???open(FH, 'SETTING.TXT');
while (<FH>) {
chomp;
my($key, $val) = split(/=/, $_, 2);
$set{$key} = $val;
}
close(FH);
print $set{'BBS_TITLE'};
0719708
2005/11/26(土) 21:47:53ID:???それがですね、読み出し元ファイル(IMAGE)に対してはbinmodeにしなくても
いいようなんです。書き出し先ファイル(STDOUT)に対してはやらねば
ならないようです。
それと、1つサンプルコードを見つけたのですが、これは読み出し元ファイルに
しかbinmodeやってないですね。
http://www.aimix.jp/cgi/syohoimgview.html
この辺があやふやというか・・・。
0720nobodyさん
2005/11/26(土) 21:55:55ID:???0721708
2005/11/26(土) 22:10:24ID:???>>720ということで、結論付けてしまいたい気分です。
やってられんです。
ようはI/O両方バイナリにしとけば確実ってことですね。
0722nobodyさん
2005/11/26(土) 22:10:48ID:???0723720
2005/11/26(土) 22:12:35ID:???ttp://www.sixnine.net/cygwin/translation/cygwin-ug-net/using-textbinary.html
0724715
2005/11/26(土) 22:12:44ID:???・テキストモード入力時の変換:0D 0A → 0A
・テキストモード出力時の変換:0A → 0D 0A
・たまたま画像に0D 0Aが無かった
・サイトが間違ってる # コピペして試してみな
0725708
2005/11/26(土) 22:16:09ID:???画像ファイルに<CR><LF>がなければ、読み込みでは変換されず
しかし<LF>があれば、書き出しで変換されるという寸法ですかね。
0726nobodyさん
2005/11/27(日) 06:03:43ID:PNI5NdX4unless($codeflag){ &error("不正投稿の可能\性があります。リロードして再投稿して下さい。");}
if ($allow_submit && !$letout_ip) {
if (($cc_time - $last_ctime) { &error("アクセスしてから投稿するまでは$noprx_stime秒以上開けて下さい。");}
}
elsif (($cc_time - $last_ctime) { &error("アクセスしてから投稿するまでは$submit_time秒以上開けて下さい。");}
で構文エラーがでます。
Perlのエラー出力は
syntax error at tmp.pl line 749, near ";}"
syntax error at tmp.pl line 751, near "elsif"
tmp.pl had compilation errors.
でした。
ちょっと原因がわからないんで、おしえてください。
0727nobodyさん
2005/11/27(日) 06:22:19ID:???| |(_)(_)l .l | | ,' |│ | | │
l └─‐、 `ー─ ' l レ ,'=コ |└─‐┐ ! `ー─┐ !
| ノ / lゝ-'ゝ、 l l | / 〈
l l ̄ ̄ r─‐ ´ / r─‐´ / ┌─‐┘ ! r─‐´ ヽ
| ! │ , r' l , r' | |│ ,r、 ,!
└‐┘ └─ ' ´ └─ ''´ └───‐' └─ ' ´ `ー'
/\___/ヽ
(.`ヽ(`> 、 /'''''' '''''':::::\
`'<`ゝr'フ\ + |(●), 、(●)、.:| +
⊂コ二Lフ^´ ノ, /⌒) | ,,,ノ(、_, )ヽ、,, .::::|
⊂l二L7_ / -ゝ-')´ .+ | `-=ニ=- ' .::::::| + .
\_ 、__,.イ\ + \ `ニニ´ .:::/ +
(T__ノ Tヽ , -r'⌒! ̄ `":::7ヽ.`- 、 ./| .
ヽ¬. / ノ`ー-、ヘ<ー1´| ヽ | :::::::::::::ト、 \ ( ./ヽ
\l__,./ i l.ヽ! | .| ::::::::::::::l ヽ `7ー.、‐'´ |\-、
_,∩_ _,∩_ _,∩_
(_____)ゝ、 (_____) y (_____)
/ :: :: :: ヽ 〉 /-‐:: ::‐-ヽ / / :: :: :: ヽ
_./ (・ )ll(・ ) ∨ _/ 0) i! 0) ∨ _/ ( ・)i!(・ ) ゙、_
// :: :: ∈ゝ :: ::ヽ // :: ‐-‐ :: ヽ // :: ー一 :: ヽ\
0728nobodyさん
2005/11/27(日) 06:26:12ID:C29mLJPMこちとらエスパーじゃねぇんだ
0729nobodyさん
2005/11/27(日) 06:28:08ID:C29mLJPMelsif (($cc_time - $last_ctime) { &e 〜 以下略
とりあえず文法を学んでみよか?
0730nobodyさん
2005/11/27(日) 07:00:10ID:???0731nobodyさん
2005/11/27(日) 07:59:17ID:???0733nobodyさん
2005/11/27(日) 16:58:11ID:???0734nobodyさん
2005/11/27(日) 17:21:56ID:6lDMwL/xprint "Content-type: text/html; charset=Shift_JIS\n";
print "set-Cookie: $COOKIE_NAME=$value; expires=$date\n\n";
と書いてクッキーを出力しているのですが、画面に
Content-type: text/html; charset=Shift_JIS
の1行が表示されてしまいます。どうしてですか?一応クッキーは作成されています。
0735nobodyさん
2005/11/27(日) 18:01:28ID:???print "set-Cookie: $COOKIE_NAME=$value; expires=$date\n\n";
この2行のあとにさらに Content-type〜 をprintしてるからでしょ。
0739nobodyさん
2005/11/28(月) 17:59:22ID:cDaON9yM秩父
hogehoge 癒し系
松本
↓上のテキストを処理後、下のようにしたい↓
松島
秩父→hogehoge 癒し系
松本
処理の1つ先回りをして、対象の1つ前の行の先頭に「hogehoge」がある場合、対象の列とhogehogeが先頭に存在する列に対して指定の処理するようにしたいのですが、
for my $ii (0..$#text) {
if("hogehoge" eq substr($text[$tn+1],0,8)){
$text1 .= "$text[$ii]→$textall[$ii+1]\n";
$ii++;
}else{$text1 .= "$textall[$ii]\n";}
}
↑のように組んで実行したところ
松島
秩父→hogehoge 癒し系
hogehoge 癒し系
松本
のようになってしまいます。
ループのたびにmyで初期化してしまうため$ii++が無駄になってしまうために起こってると思うのですが、$ii++を生かすようにするには、どのように変えたらよいですか?
0740nobodyさん
2005/11/28(月) 18:14:59ID:???こっちのforループ。
for(my $ii = 0; $ii < @text; $ii++) {
どうでもいいかも知れないけど、
substr()よりindex()使ったほうがスマートに思う。
0741nobodyさん
2005/11/28(月) 18:18:12ID:???その場合、行を無視すると単純になる(sオプションを使う)
松島\n秩父\nhogehoge 癒し系\n松本 が
松島\n秩父→hogehoge 癒し系\n松本 に置換できればいい。
あとn行先読みするときはpush,shiftを一時配列に対して使うのが楽かも。
0743nobodyさん
2005/11/28(月) 18:44:40ID:???my $test =<<"EOT";
松島
秩父
hogehoge 癒し系
松本
EOT
$test =~ s/\n(?=hogehoge)/→/g;
0745743
2005/11/28(月) 18:56:49ID:???0746741
2005/11/28(月) 19:32:34ID:???0747nobodyさん
2005/11/28(月) 20:20:33ID:???知り使うようになりました、今までPOSTやGETメッソッドによる
変数の受け渡しなんか、フォームのデコード処理とか、その逆とか
ゴリゴリ書いていましたが、これを使うようになって
なんとなく、あまりにあっけなくて
( ゜д゜)ポカーン状態なのですが
こんなヌル湯に漬かって漏れは一人前のperl使いに成れるでしょうか?
それと、CGI.pmの弊害とかってありますか?
0748nobodyさん
2005/11/28(月) 20:31:37ID:???わざわざ内部までさぐるのは時間の無駄ですので
その調子でモジュールを使いまくりましょう
0749nobodyさん
2005/11/28(月) 20:33:10ID:???0750747
2005/11/28(月) 20:52:10ID:???ライブラリ使うと確かに内部で何をやってるのか、全く分からないが
良い点としては、コードが少ない!見やすい!読みやすい!ですね
ゴリゴリ時代は自分でプログラム組んでいても3日もすればハァ?ってな
事がたまにありましたが今は逆なのらー、
ライブラリにおまかせする部分はおまかせして
簡単に正規表現による、文字処理とかハッシュによる構造体の変数の受け渡しや
参照の仕方等がスラスラできるように禿げみます。
0751nobodyさん
2005/11/28(月) 20:52:24ID:???使うモジュールは strict, vars, lib ぐらいかな。
0752nobodyさん
2005/11/28(月) 20:52:31ID:???0753nobodyさん
2005/11/28(月) 21:03:26ID:???0754nobodyさん
2005/11/28(月) 21:04:41ID:???無駄にコンパイルする時間を食ってる。
0756nobodyさん
2005/11/28(月) 21:15:18ID:???0757nobodyさん
2005/11/28(月) 21:38:42ID:???0758nobodyさん
2005/11/28(月) 22:22:30ID:???0759nobodyさん
2005/11/28(月) 23:17:50ID:???0760nobodyさん
2005/11/28(月) 23:21:46ID:???0761nobodyさん
2005/11/28(月) 23:33:07ID:jymxeugYテキストエリア(<TEXTAREA></TEXTAREA>)から送信されたテキスト内容を受け取って、
ファイルに書き出す処理を書いてます。
各行に、例えば、<BR>なんてタグをつけて出力しなおしたくて書いているんですが、どうも
意図しない改行がきてしまいます。
こいつはどこからやってきているのか。
あるいは、ここコードこうだろなんて教えていただけないでしょうか。
($buffの取得の時点でおかしい?)
コード:
#$buff取得したマルチラインのテキスト
@s_text = split(/(\r\n|r\|\n)/, $buff, 20);
open(FN, ">new.htm");
foreach $mod_line (@s_text){
$mod_line = "$mod_line" . "<BR>\n";
print FN "$mod_line";
}
元データ:
1行目
2行目
3行目
結果:
1行目<BR>
2行目<BR>
3行目<BR>
↑改行が一個多い。
0762761
2005/11/28(月) 23:38:52ID:jymxeugY出来たファイルの中身をコピペすると、以下のようになります。
コピペするとなんか改行増えてる?とにかく欲しいのは3行のデータなんです。
1行目<BR>
<BR>
2行目<BR>
<BR>
3行目<BR>
0763nobodyさん
2005/11/28(月) 23:41:43ID:???- @s_text = split(/(\r\n|r\|\n)/, $buff, 20);
+ @s_text = split(/\r\n|r\|\n/, $buff, 20);
ではどう?
0764nobodyさん
2005/11/28(月) 23:46:41ID:???http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_2BR
0765nobodyさん
2005/11/28(月) 23:52:08ID:LjPWibfYhttp://www.neet-ch.net/home3.html
0766761-762
2005/11/29(火) 00:25:17ID:???>>764
ありがとう!
>>763
一発で動きました。ただし理解できんかったです…。
括弧のあるなしっていったい…?
良かったらどう違うのか教えていただけたら幸いです。
>>764
勉強になります。
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_2BR
<BR>変換のコードは使えたら使いたいですね。
(自分のコードは
元のテキストの前後に修飾処理する用途で使いますので、
すぐに構文書けません…。)
>ちゅーか、s///の基本の利用方法ですね。
>>こんな書き方あり?
s/\x0A/後方修飾\x0A前方修飾/g;
↓こんなんなっちゃうよな…。
1行目後方修飾
前方修飾2行目後方修飾
前方修飾3行目後方修飾
前方修飾
ちゅーか、いずれにせよ、ありがとう!
0768nobodyさん
2005/11/29(火) 00:39:01ID:???() があれば、マッチしたものが 返されるリストに含まれるのよ。
If the PATTERN contains parentheses, additional list elements
are created from each matching substring in the delimiter.
split(/([,-])/, "1-10,20", 3);
produces the list value
(1, '-', 10, ',', 20)
0770761-762
2005/11/29(火) 00:50:25ID:???細かいとこまでみてもらってありがとう
>>768
な、なにょー!?
そうだったんですか…。
なんかのときに、splitに関する質問をするところでした…。
ちゅーか、split勉強しなおせって言う感じですか。
あるいは、正規表現の項目に書いてありそうですね。
ありがとうございました。
0771761-762
2005/11/29(火) 00:54:53ID:???突っ込みすぎかもしれませんが、
capturingって、
どんなことに使うつもりになったんですか?
また、しばらくperlから離れちゃいそうなので教えてもらいたいのですが。
0772nobodyさん
2005/11/29(火) 01:08:01ID:???どんなことに使うつもりになったって言うと…
splitの中でグルーピングする必要性が出た場合は、
?:をつけてclusteringにするのを忘れないようにしないとな、という話です。
0774nobodyさん
2005/11/29(火) 01:24:46ID:???0775nobodyさん
2005/11/29(火) 01:33:40ID:jT6RPKnvs/¥x0D¥x0A|¥x0D|¥x0A/¥n/g
がおすすめ
0776nobodyさん
2005/11/29(火) 01:41:13ID:???イラッとした
ハ_ハ
('(゚∀゚∩ イラッとした!
ヽ 〈
ヽヽ_)
0778nobodyさん
2005/11/29(火) 10:55:30ID:jT6RPKnvそんなにパフォーマンスに影響しなうのでは?
って思う。
書き込みよりも読み込みの回数のが多いのがほとんどだと思うし…
0779nobodyさん
2005/11/29(火) 12:08:00ID:???ついでに、>>766は改行コード統一それ自体の話をしているわけではないし、
投稿時以外にも膨大なデータで改行コードを統一する必要がある場合もあるだろう。
わざわざ突っかからないで…
0782nobodyさん
2005/11/29(火) 13:54:21ID:skNvEddZs/¥x0D¥x0A/¥n/g;
tr/¥x0D¥x0A/¥n¥n/;
がおすすめ
0783nobodyさん
2005/11/29(火) 14:07:54ID:???('(゚∀゚∩ イラッとした!
ヽ 〈
ヽヽ_)
0784nobodyさん
2005/11/29(火) 14:11:20ID:???イラッとした!
0785nobodyさん
2005/11/29(火) 14:49:06ID:???みたいなメッセージが出ます。
Permission解除するのってconfのどこでしょうか。。
0787nobodyさん
2005/11/29(火) 15:50:53ID:???PerlじゃなくてApacheの質問だね…まあいいや、OptionsにExecCGIを設定
それにしても5.8.2って随分古いものを使ってるな…最新版は5.8.7だぞ
0788nobodyさん
2005/11/29(火) 17:51:42ID:???win2kやwinxp proの時はすんなり言ったんですが。xp homeだと何か
先にインストール必要なものがあったりしますかね。
0789nobodyさん
2005/11/29(火) 17:57:25ID:???0790nobodyさん
2005/11/29(火) 18:26:02ID:???0791nobodyさん
2005/11/29(火) 19:46:51ID:???コマンドプロンプトからはtest.cgi動くんですが・・・うーむ。
apacheの設定であることまでは絞れたけど相変わらず
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
・・・でadministratorに聞けって俺?
0792nobodyさん
2005/11/29(火) 19:51:28ID:???>this error may be available in the server error log.
って出てるだろーが。
■ このスレッドは過去ログ倉庫に格納されています