Perlコーディング初心者質問スレ Part 44
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/10/17(月) 00:47:17ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0666age
2005/11/25(金) 18:55:49ID:PaUDYDn8バイナリーファイルは何でもありだからだめだよ
0667nobodyさん
2005/11/25(金) 19:09:11ID:???http://perldoc.jp/docs/perl/5.8.0/strict.pod
http://perldoc.jp/docs/perl/5.8.0/perlstyle.pod
0668nobodyさん
2005/11/25(金) 19:18:35ID:???> バイナリファイルに\rのない\nが含まれていることはありえない、
扱うバイナリファイルがその前提なら、
その方法でもいいと思うよ。
0669nobodyさん
2005/11/25(金) 19:49:39ID:???0670nobodyさん
2005/11/25(金) 19:54:43ID:???0671nobodyさん
2005/11/25(金) 19:55:27ID:???0672nobodyさん
2005/11/25(金) 20:19:10ID:???0673nobodyさん
2005/11/25(金) 20:21:34ID:???0674nobodyさん
2005/11/25(金) 20:51:44ID:???自前でチェックするならx00のあり/なしだな。手抜きの場合は。
0675nobodyさん
2005/11/25(金) 20:55:26ID:???使用者感想
use strictで肩こりが解消しました。(茨城県 I.・Y様)
もうuse strict無しではコーヒーは飲めません。(北海道 H・N様)
use strictのお陰で宝くじが当り、彼女もできました。(東京都 A・J様)
0676nobodyさん
2005/11/25(金) 21:22:52ID:???>>675みたいなおちゃらけじゃなくマジレス
use strictでkentの呪縛から逃れることが出来ますた。(京都府 M・N)
0677nobodyさん
2005/11/25(金) 21:31:13ID:???答え)use strict;の一文を削除してからどうぞ。
0679nobodyさん
2005/11/25(金) 21:41:37ID:???0680nobodyさん
2005/11/25(金) 21:47:22ID:???0681nobodyさん
2005/11/25(金) 21:48:38ID:???0682nobodyさん
2005/11/26(土) 00:24:41ID:???use strictを使う理由は、use strict 'vars';が一番大きいかな。
完全に修飾されてない、宣言の無い変数を使うとエラーになる。
つまり、タイプミスなどで間違った変数名を使うとエラーで教えてくれる。
0683nobodyさん
2005/11/26(土) 02:02:52ID:???0684nobodyさん
2005/11/26(土) 02:32:09ID:???スタイルを強制するわけじゃないからね。
0686nobodyさん
2005/11/26(土) 09:02:53ID:???例えば、上のほうに設定系の変数をわかりやすくまとめておいて、ここまでが
設定ですよ〜、、、みたいな。。
0687nobodyさん
2005/11/26(土) 09:07:23ID:???0688ゆーき
2005/11/26(土) 09:27:08ID:yGTXOsFBprint "Location: mailto:aaa\@aaa.com?subject=件名\&body=1行目%0D%0A2行目\n\n";
「%0D%0A」を入れてみましたがだめでした。文字コードや、URLエンコード関係が原因なんでしょうか???
ちなみにPERLのスクリプト自体はShift-jisで書いています。
0689愛とゆーきだけが友達さ
2005/11/26(土) 09:33:48ID:???bodyなんてメーラー依存度が高いわけだし。。
0690ゆーき
2005/11/26(土) 09:42:03ID:yGTXOsFB0692ゆーき
2005/11/26(土) 11:51:53ID:yGTXOsFBそれも、最終手段としては考えていますが、
ユーザのひと手間が増えますので、なるべく他の方法を使いたいと思っているのですが...
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
■ このスレッドは過去ログ倉庫に格納されています