Perlコーディング初心者質問スレ Part 51
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/07/27(木) 17:04:23ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0283nobodyさん
2006/08/03(木) 18:22:35ID:???0284nobodyさん
2006/08/03(木) 19:17:34ID:Uu9V7GTdCGI_Liteを用いて作成したアップローダーで、実際にアップロードする前に
1回確認画面(「このファイルでOK?」という感じのもの)を入れたいと考えています。
2.それでこんな風にやってみたが・・・
<INPUT TYPE="file" NAME="up_data">の内容を
$data = $FORM{'up_data'};として、確認画面で
<INPUT TYPE="hidden" NAME="up_data" VALUE="$data">
と入れて保持しておこうとしてみました。
3.こんなエラーが出て上手く行かなかった。
エラーというかhiddenのVALUEが空っぽになってしまいました。
そもそも自分がやろうとしていることが可能かどうかも分からない状況です。
具体的な手順を教えていただければこれ以上のことはありませんが、
可能か不可能かという回答だけでも構いませんので、よろしくお願いします。
0285nobodyさん
2006/08/03(木) 19:21:13ID:???0286nobodyさん
2006/08/03(木) 19:24:01ID:???0287284
2006/08/03(木) 19:26:19ID:Uu9V7GTdあぁ!なるほど!
とりあえずは確認画面に行くと同時にアップしておいて
確認画面でキャンセルしたらテンポラリファイル削除
確認画面でそのままOKしたらテンポラリファイルリネーム
って感じですかね。
ありがとうございます!
目からウロコでした。
0289284
2006/08/03(木) 19:37:26ID:Uu9V7GTd完全に見落としてました。
危うくゴミだらけになるとこでした。
その解決方法は・・・
テンポラリファイルの名前にアップした日時を入れておいて
次回CGIにアクセスがあった場合にそのときの日時と比較して
ある程度の差があるファイルは全て削除
というようなものを想像してみましたが、変ですかね・・・?
0290nobodyさん
2006/08/03(木) 19:47:22ID:???0291284
2006/08/03(木) 19:52:27ID:Uu9V7GTdやろうとしていることが間違ってないという後押しは心強いです。
ありがとうございました!
0292nobodyさん
2006/08/03(木) 20:35:00ID:???ロングテールでググれ。話はそれからだ
0293nobodyさん
2006/08/03(木) 22:03:34ID:???輪足の場合はjsが現実的そうですね。
ちょっとあきらめかけてましたが、盲点でした。
jsをバカにしすぎてまいた。
すれではおれいあしな。
0294nobodyさん
2006/08/03(木) 22:15:14ID:???0295nobodyさん
2006/08/03(木) 22:36:00ID:???まぁアクセス解析img挿入もかわらんか。
apacheログとるのが一番楽。
0296nobodyさん
2006/08/03(木) 22:53:08ID:???って、apacheのログを取るモジュールをPerlで作ればスレ違いじゃない!
0297nobodyさん
2006/08/03(木) 23:44:20ID:???自分自身からの呼び出しのみを許可して外部からの呼び出しは禁止させたいんですが
HTTP_REFERERだと容易に偽れてしまいますよね?
0298nobodyさん
2006/08/03(木) 23:52:51ID:???hoge.cgiを呼び出す側のhtmlもcgiにして、
<img src="hoge.cgi?$ENV{HTTP_REFERER}">
でもできそう。
というか全部のページをCGI にするのって、perlならそれほどめんどくさくない。
0301nobodyさん
2006/08/04(金) 11:38:58ID:???>でもできそう。
ほのぼのマンか?
0303nobodyさん
2006/08/04(金) 15:54:14ID:???0304nobodyさん
2006/08/04(金) 16:50:18ID:???0306298
2006/08/04(金) 22:20:26ID:???0312nobodyさん
2006/08/05(土) 13:12:05ID:???0313nobodyさん
2006/08/05(土) 13:18:43ID:???辞書を引いて見るといい。
0314nobodyさん
2006/08/05(土) 17:42:22ID:IQdTNDFf(1)商取引で契約当事者から出される損害賠償の請求を伴った苦情。
(2)(一般に)苦情。注文。「―をつける」
三省堂提供「デイリー 新語辞典」より
0315nobodyさん
2006/08/05(土) 17:56:39ID:???どうみてもこういう場合には不適切じゃね?
http://www2.alc.co.jp/ejr/index.php?word_in=claim&word_in3=PVawEWi72JXCKoa0Je
0316nobodyさん
2006/08/05(土) 18:02:07ID:???0317nobodyさん
2006/08/05(土) 18:08:19ID:???0318nobodyさん
2006/08/06(日) 12:14:13ID:NewLER86どのように使い分けたらいいのか分かりません。
(同じとしか思えない)
どういうときにmyを使うべきか、
どういうときにlocalを使うべきか、 おしえていただけますでしょうか?
よろしくお願い申し上げます。
0319nobodyさん
2006/08/06(日) 12:26:48ID:???0320nobodyさん
2006/08/06(日) 13:22:44ID:???local はパッケージグローバル変数の値を一時的に差し換えて利用するための関数で、ダイナミックスコープと呼ばれる効果範囲を持っています。
my はシンボルテーブルに属さない局所的な変数を宣言するための関数で、レキシカルスコープと呼ばれる範囲で利用可能な変数を新たに生成します。
>>318 の求める物はほとんどの場合 my の働きだと思います (ぼくがなぜそう思うか理解できないなら、まず間違いなくそうです)。
ですから、そうしない理由を明示できない場合は常に my (及び use strict) を使ってください。
0321318
2006/08/06(日) 13:52:08ID:???親切にごせつめいいただいてありがとうございます。
おっしゃるとおりに、my (及び use strict) を使って行こうと思います。
0322nobodyさん
2006/08/06(日) 14:37:05ID:???ただ、perlソースの文字コードはEUCの為、XMLファイルのUTF-8の文字
コードに変換する必要があると思います。
そこで質問なのですが、EUC→UTF-8への文字コード変換について
一番スマートな方法は何でしょうか?
0324nobodyさん
2006/08/06(日) 15:21:19ID:???0325323
2006/08/06(日) 15:21:52ID:???0326nobodyさん
2006/08/06(日) 16:40:59ID:???>perlソースの文字コードはEUCの為
これに固執する理由による。
文面から見るに 「perlはEUCで書かなければならない」 と勘違いしてないか?
普通に UTF-8 でスクリプト書いても通るよ。
0327nobodyさん
2006/08/06(日) 18:22:10ID:???0329322
2006/08/06(日) 22:57:22ID:???有難うございます。おっしゃった方法で解決できました。
UTF-8でスクリプトを書く方法でも出来ました。
皆様有難う御座います。
0330nobodyさん
2006/08/07(月) 12:05:18ID:???bとcが2つ以上あったときに真を返すようにするにはどのようにすればいいのでしょうか?
「abacacaabaa」だったら真を返す、のような感じです。
0331nobodyさん
2006/08/07(月) 12:12:57ID:???0332nobodyさん
2006/08/07(月) 12:15:55ID:???言い方があいまいでよくわからない
bとcの個数をそれぞれN(b),N(c)としよう。
N(b) >= 2 && N(c) >= 2
N(b) >= 2 || N(c) >= 2
N(b)+N(c) >= 2
どれともとれるが。
0333nobodyさん
2006/08/07(月) 12:18:33ID:???申し訳ないです、もう少し粘ってみます
>>332
N(b) >= 2 && N(c) >= 2
これです。わかりにくくてすみません
0334333
2006/08/07(月) 12:27:32ID:???>>330のように11文字だったら
if($x =~ /b.{0,10}?g/i and $x =~ /d.{0,10}?d/i) {
何らかの処理
}
でいけました
0335nobodyさん
2006/08/07(月) 12:28:37ID:???それぞれの文字の間に.*はさんで|でならべればできあがり。
わざわざ正規表現使わずに数えたほうが楽かもね。
0336nobodyさん
2006/08/07(月) 12:52:26ID:???perldebugでインタラクティブなperlを使用するために
$ perl -d -e 42
とありますが、なぜ42なのでしょうか?
0337nobodyさん
2006/08/07(月) 13:57:17ID:???0341nobodyさん
2006/08/07(月) 21:15:48ID:???フォームにINPUT type=imageを使用した時にnameとvalueが無効になってしまっているようなんです。
これは元々そういう仕様なんでしょうか?
それとも何かが間違っているのでしょうか?
0342nobodyさん
2006/08/07(月) 21:21:23ID:???HTMLの質問はWeb制作板へ。
0343nobodyさん
2006/08/07(月) 21:52:54ID:DmsXLNkonameに同じ名前を指定する時、
Input typeがcheckboxならばcgi-lib.plで処理出来るのですが
hiddenの時も同じように処理は出来ないのでしょうか?
&ReadParseの力を使っても何も表示されませんでした。
0346nobodyさん
2006/08/07(月) 22:42:46ID:???0347nobodyさん
2006/08/07(月) 22:56:05ID:???cgi-lib.pl使ってないけど
普通にできると思う。
けどnameをおんなじ名前指定するのは、非推奨のはずなので
perlというより、サーバー側でちゃんと処理されない可能性は考えられる。
詳しい人あとよろしく
0348nobodyさん
2006/08/07(月) 23:34:23ID:???で取り出せるよ?
0349343
2006/08/08(火) 02:46:18ID:???無事出来ました。ありがとうございました。
・・・・もう少し自力で出来るように頑張ります。すみません。
0350nobodyさん
2006/08/08(火) 05:27:55ID:???0351nobodyさん
2006/08/08(火) 07:10:51ID:???0352nobodyさん
2006/08/08(火) 08:21:39ID:???0353nobodyさん
2006/08/08(火) 10:21:01ID:???0354nobodyさん
2006/08/08(火) 12:23:07ID:???えらい見づらくなる
0355nobodyさん
2006/08/08(火) 12:28:11ID:???0356nobodyさん
2006/08/08(火) 12:33:02ID:???テキストファイルを読み込む時に半角スペースで区切って文字を認識させてるっぽいんですが
改行して認識させるにはどうしたらいいっスかね?
0358nobodyさん
2006/08/08(火) 12:38:35ID:???いやファイルを読み込んでforeach ( split(/\s+/, $test) ) {って感じでなってるんだけどこれだと半角スペースで
区切って複数を認識させるんだけどそれを改行して複数認識させたいっていうか・・・。
0359nobodyさん
2006/08/08(火) 12:46:39ID:???/\s+/
↓
/[\r\n]+/
とかでいいんでね?
まあ、今回は何もいうまい。
0360nobodyさん
2006/08/08(火) 13:14:12ID:???として、画面を戻すのを弾こうとおもうのですが、ifの条件の式が分かりません
解説しているサイトがあれば教えてください。お願いします
0361nobodyさん
2006/08/08(火) 13:21:46ID:???0362nobodyさん
2006/08/08(火) 13:25:42ID:???そのままだとユーザビリティに反するので答えてくれないかもしれないが
0364nobodyさん
2006/08/08(火) 23:25:32ID:???ラジオボタンの制御がうまくいきません。
どういうことかというと、
フォームに必要項目を入力してもらい、確認ボタンを押した後、
入力項目にエラーがあると修正ボタンが表示され、
修正をしてもらうという仕組みなのですが、
修正ボタンを押して入力フォームに戻ると、ラジオボタンが選択していた
状態ではなくなり、デフォルトの状態にもどってしまいます。
修正ボタンを押した後に、ラジオボタンの位置を、選択した箇所のまま表示させるには
どのような処理を行えばいいのでしょうか?
どなたかご教授お願い致します。
修正画面までラジオボタンのデータが渡っていることまでは確認済みです。
0365nobodyさん
2006/08/08(火) 23:33:10ID:???0366nobodyさん
2006/08/08(火) 23:50:03ID:???早速アドバイスありがとうございます。
HTMLのソースが下のような感じです。
input name="genre" type="radio" value="1-1">
input name="genre" type="radio" value="1-2">
input name="genre" type="radio" value="1-3">
この行一行一行を「m//」でvalueが一致するか調べて
一致したら、「s///」で行ごと置換すればいいのでしょうか?
0367nobodyさん
2006/08/09(水) 00:02:59ID:???これとかだな。
http://search.cpan.org/~nwclark/perl-5.8.8/lib/Term/ReadLine.pm
0368nobodyさん
2006/08/09(水) 00:16:15ID:???0369nobodyさん
2006/08/09(水) 02:28:37ID:2nlyYTa7データの書き込み処理に躓きました・・・。ヒントを下さい・・・。
$hogeに、「5」という数字が入っているとします。
そしたら、下記の「log.dat」の「番号5」の値の投票結果を「+1」していきたいのです。
つまり、「$hogeに入った数字と、log.datの『番号』の値を比べて、同じなら『投票結果』の値を『+1』する」
というスクリプトを組みたいのですが・・・・。
ログファイル(log.dat)の中身は以下の通りです。
番号 投票結果
-----------------------
1 10
2 20
3 26
4 30
5 10
-----------------------
どうか、よろしくお願いします。
0370nobodyさん
2006/08/09(水) 03:32:28ID:???0371369
2006/08/09(水) 03:40:54ID:eB/zZqiVありがとうございます。かなり複雑っすね・・・。
たびたび申し訳ありませんが、自分には何のこっちゃか・・・ orz
0372nobodyさん
2006/08/09(水) 04:05:06ID:???人間が見やすいようにするんじゃなくて
perl様が見やすいようにする
つか、他人の作った投票スクリプトを読み下せ
0373nobodyさん
2006/08/09(水) 04:32:22ID:WfKDVGHV[0-9]{1,3}では999までヒットしてしまいます。
ループもさせたくないのですが、、
0374nobodyさん
2006/08/09(水) 05:06:26ID:???0375nobodyさん
2006/08/09(水) 06:10:08ID:???そう書くのは割りと普通じゃないの?
簡単なログファイルでいいのならたぶん俺もそう書く。
open (略); read(略); %data = split(/\s+/);
だけでもデータとれるし。
>>369
+1 して保存するときは普通に。
$data{5}++;
foreach (sort { $a <=> $b } keys %data) { print 略 $_, "\t", $data{$_}, "\n"; }
close (略);
>>370 は結構トリッキーな書き方だね。 (.*)$ の部分はどうして必要なのかちょっとわからなかったけど。
0376nobodyさん
2006/08/09(水) 07:14:26ID:???>>372が言っているように、ログファイルの書式を見直すべし。
1, 2, 最終行 は不要。もし入れたいならコメントと分かるように工夫を。
余分なスペースも不要。
ログファイル例:
1 10
2 20
3 26
4 30
5 10
> 「番号5」の値の投票結果を「+1」していきたい
いったん全部読みこんで、5の値だけ変えて、全部書き出す。
0377nobodyさん
2006/08/09(水) 07:22:05ID:???0378nobodyさん
2006/08/09(水) 10:40:29ID:???ログファイル例:
10
20
26
30
10
で、十分。あとは、
open fh,$log;
@dat=<fh>;
close fh;
chomp @dat;
$dat[$hoge - 1]++;
open fh,">$log";
print fh join "\n",@dat;
close fh;
で、どうぞ
0379369
2006/08/09(水) 12:22:14ID:???0381378
2006/08/09(水) 13:27:12ID:???えっと、自分は試して書いてますが・・・
最初chompとjoinは書いてませんでしたが、それだとうまく行かなかったので足しました・・・
なので、その辺がちょっと冗長かも・・・
0382nobodyさん
2006/08/09(水) 13:29:07ID:???■ このスレッドは過去ログ倉庫に格納されています